Drupal → Как программно создать термин таксономии

16.06.2011

Создать термин, зная vid словаря:

$term = (object)array(
  'vid' => VID_СЛОВАРЯ,
  'name' => 'Название термина',
);
taxonomy_term_save($term);

Создать термин, зная машинное имя словаря:

$vocabulary = taxonomy_vocabulary_machine_name_load('машинное_имя_словаря');
$term = (object)array(
  'vid' => $vocabulary->vid,
  'name' => 'Название термина',
);
taxonomy_term_save($term);

Создать термин с заранее известным tid, зная vid словаря:

$term = (object)array(
  'tid' => TID_ТЕРМИНА,
  'vid' => VID_СЛОВАРЯ,
  'name' => 'Название термина',
);
db_query("INSERT IGNORE INTO {taxonomy_term_data} (tid) VALUES (?)", array($term->tid));
taxonomy_term_save($term);
Написанное актуально для
Drupal 7
Похожие записи

Комментарии

Гость
26.07.2011, 22:21

Еще мне кажется надо дополнить, что объект $term дозаполняется новыми данными:

$term = (object)array('vid' => VID_СЛОВАРЯ, 'name' => 'Название термина');
taxonomy_term_save($term);
echo $term->tid;
Гость
24.08.2011, 12:30

этот код работает если у термина нет полей

Гость
11.09.2011, 14:15

В Drupal 7 это легко и просто. А как быть в Drupal 6?

db_query

а почему не через новый "абстрактный уровень бд" д7 ? =)

$term = new stdClass();
$term->name = $name;
$term->vid = $vid;
taxonomy_term_save($term);
return $term->tid;

со всеми возможными parent description

Гость
19.06.2013, 06:02

Здравствуйте. Делаю по такому принципуЖ
$term = new stdClass();
$term->name = $name;
$term->vid = $vid;
taxonomy_term_save($term);
return $term->tid;

В базе все появляется но в списке терминов словаря не отображаются. Подскажите вчем может быть проблема..

Гость
04.11.2013, 22:29

Присоединяюсь к последнему комментарию.
Термины создаются, но в словаре не отображаются.

Ответ на два последних комментария:
Добавлял я термины несколько другим способом, т.е. не "taxonomy_term_save", а напрямую через api друпала по работе с его базой, но суть в целом одна и та же.
Дело в том, что при добавлении терминов в таблицу taxonomy_term_data необходимо так же добавить данные в таблицу taxonomy_term_hierarchy. Мне по крайне мере помогло и все заработало :)

Андрей
14.06.2014, 02:14
db_query("INSERT IGNORE INTO {taxonomy_term_data} (tid) VALUES (?)", array($term->tid));
taxonomy_term_save($term);
db_query("INSERT IGNORE INTO {taxonomy_term_hierarchy} (tid,parent) VALUES (".$term->tid.",".$entity['cpid'].")");

продолжение кода)

не советуйте плохого — taxonomy_term_save() самостоятельно добавляет данные в taxonomy_term_hierarchy

Гость
26.12.2014, 22:07

не советуйте плохого — taxonomy_term_save() самостоятельно добавляет данные в taxonomy_term_hierarchy

Добавляет, если прописать parent, иначе нехочет

    $term = (object)array(
        'tid' =>  $imort_tid['tid'],
        'vid' => $imort_tid['vid'],
        'name' => $imort_tid['name'],
        'parent' => 0
    );
    db_query("INSERT IGNORE INTO {taxonomy_term_data} (tid) VALUES (?)", array($term->tid));
    taxonomy_term_save($term);

Добавить комментарий