Термин таксономии- в новую ноду автоматом.

Главные вкладки

Аватар пользователя Orion76@drupal.org Orion76@drupal.org 27 марта 2010 в 23:23

Долго искал простое,готовое решение: как назначить новой ноде термин таксономии автоматом.
Вроде бы само собой разумеется, вошел в нужный раздел сайта, щелкнул кнопку "Добавить материал",
Забил Заголовок, текст и ВСЕ... Материал в нужном разделе. Логично?
Так нет же ,надо найти кноку добавления материала, сообразить ..как выбрать нужный раздел (из списка, чекбоксы, автозаполнение,теги).
Так воот... Готового простого не нашел.. Нужно было или использовать пару-тройку дополнительных модулей или писать хрен-знает где, хрен-знает какой код для обработки вывода формы.

Может кому пригодиться... Нашел вроде простой способ это сделать( на оф.сайте), хотя не очень красивый, надо править модуль taxonomy а конкретнее файл taxonomy.module (КОРЕНЬ_САЙТА/modules/taxonomy/taxonomy.module)
функция taxonomy_form_alter

<?php
foreach ($terms as $term) {
          
// Free tagging has no default terms and also no vid after preview.
          
if (isset($term->vid) && $term->vid == $vocabulary->vid) {
            
$default_terms[$term->tid] = $term;
          }
        }

//Вставить в код следующие строки
//************************************************************************
        
if ($_GET['default_id'] != "") {
          
$default_terms[$_GET['default_id']] = $_GET['default_id'];  
        }
//************************************************************************

        

$form['taxonomy'][$vocabulary->vid] = taxonomy_form($vocabulary->vidarray_keys($default_terms), filter_xss_admin($vocabulary->help));
        
$form['taxonomy'][$vocabulary->vid]['#weight'] = $vocabulary->weight;
        
$form['taxonomy'][$vocabulary->vid]['#required'] = $vocabulary->required;

?>

Смысл данной вставки: получаем TID термина по умолчанию из ссылки,
Но чтобы он там был, нам надо в ссылку добавить параметр с TID термина такономии
Например:
(default_id - добавляемый параметр)
node/add/ТИП_ВАШЕГО_МАТЕРИАЛА/?default_id=ИД_ТЕРМИНА_ТАКСОНОМИИ

И все,вставляем эту ссылку вид или непосредственно в шаблон ноды.
и ВСЕ...

Комментарии

Аватар пользователя graker graker 27 марта 2010 в 23:28

Ну да, можно такое делать. Только лучше не править модуль таксономии, а hook_form_alter в своем модуле реализовать.

Аватар пользователя graker graker 28 марта 2010 в 0:55

Я разве сказал "в своей теме"? Smile Нет. Надо сделать свой модуль, а в нем - хук имямодуля_форм_альтер, в котором вносятся необходимые изменения (а не копируется функция из модуля таксономии).

Аватар пользователя Orion76@drupal.org Orion76@drupal.org 28 марта 2010 в 4:31

неа... не работает...
taxonomy_form_alter последним отрабатывает (после ИМЯМОДУЛЯ_form_alter) и исправляет обратно термин поумолчанию на пустой массив.
...
Агаа!!
Надо чтоб в taxonomy_form_alter первое условие(If) не сработало...
<?phpif (isset($form['type']) && isset($form['#node']) && (!variable_get('taxonomy_override_selector', FALSE)) && $form['type']['#value'] .'_node_form' == $form_id) ?>

Наверное надо $taxonomy_override_selector в TRUE установить в ИМЯМОДУЛЯ_form_alter типа:

<?phpvariable_set('taxonomy_override_selector', TRUE);?>

Так все работает...

Аватар пользователя graker graker 28 марта 2010 в 9:01

<a href="mailto:Orion76@drupal.org">Orion76@drupal.org</a> wrote:
неа... не работает...
taxonomy_form_alter последним отрабатывает (после ИМЯМОДУЛЯ_form_alter) и исправляет обратно термин поумолчанию на пустой массив.

Не все знают, но у модулей есть вес. Если его изменить - будет после таксономии отрабатывать.

Аватар пользователя Orion76@drupal.org Orion76@drupal.org 28 марта 2010 в 14:23

Про Вес модулей читал, но это опять надо или код править или модуль дополнительный подключать для кправления "весами".

В коментариях к функции taxonomy_form_alter сказано:

<?php Generate a form for selecting terms to associate with a node.
 * 
We check for taxonomy_override_selector before loading the full
 
vocabularyso contrib modules can intercept before hook_form_alter
 
*  and provide scalable alternatives.?>

т.е. если я правильно понял, для обработки элементов выбора терминов ноды хуком, надо просто значение переменной "taxonomy_override_selector" в TRUE установить.

Теперь еще надо придумать, как кнопочку для добавления материала в раздел(созданный при помощи таксономии)добавить.

Аватар пользователя graker graker 28 марта 2010 в 18:10

<a href="mailto:Orion76@drupal.org">Orion76@drupal.org</a> wrote:
Про Вес модулей читал, но это опять надо или код править или модуль дополнительный подключать для кправления "весами".

Если для собственного модуля, то можно прямо в нем вес задать.
Но вообще да, в вашем случае это видимо необязательно.