Задача:
Нужно в модуле создать термин определенного словаря таксономии в модуле Drupal.
Решение:
Для того, чтобы программно создать термин таксономии в модуле, нужно написать что-то подобное в "_insert"-функции:
$vid = variable_get('node_product_vocabulary', ''); // vocabulary ID is hard coded for this example
$autoterm = array(
'name' => $node->title, // or whatever you want the auto-term to be named
'parent' => 0,
'vid' => $vid,
);
taxonomy_save_term($autoterm);
$new_tid = $autoterm['tid'];
$node->taxonomy[$vid][$tid] = $new_tid;
$autoterm = array(
'name' => $node->title, // or whatever you want the auto-term to be named
'parent' => 0,
'vid' => $vid,
);
taxonomy_save_term($autoterm);
$new_tid = $autoterm['tid'];
$node->taxonomy[$vid][$tid] = $new_tid;
Использованные материалы
- Creating taxonomy terms via the Drupal API
- taxonomy_node_save() not creating the term<->node relation
API
Bookmark/Search this post with












Комментарии
ЭЭЭЭЭ. Простите я верно понял что это строкой
$tid = (int) db_result(db_query('SELECT MAX(tid) FROM {term_data} WHERE vid = %d', $vid));
вы получаете tid созданного термина?
Если я правильно понял, то этот способ как минимум не корректен тем, что вновь созданный термин не всегда будет иметь максимальный tid в базе term_data
и второе, зачем это велосипед? Когда сама функция taxonomy_save_term($autoterm); возращает tid созданного термина?
taxonomy_save_term($autoterm);
$new_tid = $autoterm['tid'];
Demimurych, я проверил - так и есть. Массив передаётся по ссылке и функция taxonomy_save_term() создаёт 'tid' в этом массиве. Я пробовал этот вариант, но не помню уже почему у меня не получилось так сделать - может быть терпения не хватило.
Исправил с рецепте.