Как программно изменять поля терминов таксономии?


В D7, как программно добавлять/изменять поля в термины таксономии? Они явно доступны для заполнения, и в пользовательском интерфейсе я могу добавлять и редактировать поля в них так же, как и в узлах, но в коде это оказалось непростой задачей. Допустим, у меня есть словарь под названием Фрукты с такими терминами, как Яблоки и бананы. Я добавил в него поле с именем main_article_id, поэтому все термины имеют название, описание и идентификатор основной статьи. Когда я создаю узел с именем Яблоки, который имеет ссылку на словарь фруктов (field_fruit) и Термин "Яблоки" выбран, код должен обновить термин "Яблоки" и установить в поле main_article_id значение $node->nid. Вот мой код:

//hook_node_insert fires after new node has been inserted into db
function MYMODULE_node_insert($node)
{
    $taxonomy_term_id = $node->field_FRUIT[LANGUAGE_NONE][0]['value'];
    $taxonomy_term = taxonomy_term_load($value['tid']);
    if($taxonomy_term != FALSE)
    {
        //doesn't work
        $taxonomy_term->field_main_article_id[LANGUAGE_NONE][0]['value'] = $node->nid;
        taxonomy_term_save($taxonomy_term);
    }
}
Author: Ari Linn, 2012-05-16

1 answers

Имя столбца для поля не всегда value; в случае ссылок на термины таксономии это tid, а в случае ссылок на узлы/сущности это зависит от того, какой модуль вы используете.

Для поля, созданного с использованием модуля Ссылки , имя nid, а для поля, созданного с использованием модуля Ссылка на сущность, это target_id.

Следующий код должен работать немного лучше:

//hook_node_insert fires after new node has been inserted into db
function MYMODULE_node_insert($node)
{
    $taxonomy_term_id = $node->field_FRUIT[LANGUAGE_NONE][0]['tid'];

    // $value['tid'] isn't defined anywhere in this function scope so I 
    // assume you meant to use $taxonomy_term_id here
    $taxonomy_term = taxonomy_term_load($taxonomy_term_id);
    if($taxonomy_term != FALSE)
    {
        $column_name = 'nid'; // Or 'target_id' if you're using entity reference            

        $taxonomy_term->field_main_article_id[LANGUAGE_NONE][0][$column_name] = $node->nid;
        taxonomy_term_save($taxonomy_term);
    }
}
 9
Author: Clive, 2012-05-16 14:44:16