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


19

Единственная функция в списке функций taxonomy.module, которая выглядит так, как будто она выполняет то, что я хочу, является закрытой функцией ( _taxonomy_get_tid_from_term ).

Какую функцию я должен использовать, если все, что я знаю, это название термина таксономии и мне нужно узнать его идентификатор?

Ответы:


14

Это taxonomy_get_term_by_name (), который вы используете, как показано в следующем коде.

$term_array = taxonomy_get_term_by_name('Foo');
$term = reset($term_array); # get the first element of the array which is our term object
print $term->name;

1
Это, кажется, дает мне массив, а не TID. $foo[0]->tidничего не делает, потому что возвращает массив с ключами TID. Таким образом, чтобы получить TID, мне нужен TID или сделать foreach()хотя бы, только на одном предмете? В противном случае:Undefined offset: 0
Бэт

3
Он возвращает массив, поскольку ничто не мешает нескольким терминам иметь одно и то же имя. Вы не можете знать, что это только один предмет.
Летарион

2
@beth, либо используйте второй параметр, чтобы ограничить определенную лексику, либо выполните цикл с помощью foreach ($terms as $term)и проверьте, $term->vidчтобы убедиться, что у вас есть правильный.
mpdonadio

Я просто быстро набрал версию D6, к которой я привык. По вашим ссылкам / URL-адресам теперь я вижу, что вы используете D7. Комментарии выше должны прояснить для вас вещи.
Джимаджамма

22

taxonomy_get_term_by_name() сделает свое дело:

$terms = taxonomy_get_term_by_name($row->field_term_name);
if (!empty($terms)) {
  $first_term = array_shift($terms);
  print $first_term->tid;
}

4
Есть также второй аргумент, который был добавлен в Drupal 7, чтобы ограничить это определенным словарным запасом. Это устраняет необходимость в циклическом просмотре результатов, чтобы найти нужный вам термин, если у вас может быть несколько приливов с одинаковым именем.
mpdonadio

2
Отсутствует точка с запятой в строке$first_term = array_shift($terms);
Кевин Сиджи

1

Эта функция работает для меня:

/**
 * Return the term id for a given term name.
 */
function _get_tid_from_term_name($term_name) {
  $vocabulary = 'tags';
  $arr_terms = taxonomy_get_term_by_name($term_name, $vocabulary);
  if (!empty($arr_terms)) {
    $arr_terms = array_values($arr_terms);
    $tid = $arr_terms[0]->tid;
  }
  else {
    $vobj = taxonomy_vocabulary_machine_name_load($vocabulary);
    $term = new stdClass();
    $term->name = $term_name;
    $term->vid = $vobj->vid;
    taxonomy_term_save($term);
    $tid = $term->tid;
  }
  return $tid;
}

Если вы используете другой словарь (отличный от тегов), то измените код над строкой:

$vocabulary = 'tags';
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.