Как программно изменять поля терминов таксономии?
В 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);
}
}
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);
}
}