xandeadx.ru Блог музицирующего веб-девелопера

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

Опубликовано в

Создать термин, зная 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
Похожие записи

Комментарии RSS

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

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

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

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

db_query

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

а он ignore делать не умеет

хотя вспомнил что есть db_merge

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

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

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

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

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

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

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

не советуйте плохого — 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);

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании