Як отримати ідентифікатор терміна таксономії від його назви?


19

Єдина функція у списку функцій таксономії.модуля, яка виглядає так, як вона робить те, що я хочу, видається приватною функцією ( _taxonomy_get_tid_from_term ).

Яку функцію я повинен використовувати, якщо все, що я знаю, це назва терміна таксономія, і мені потрібно дізнатися його ідентифікатор?

Відповіді:


14

Це таксономія_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. Зазначені коментарі повинні прояснити вам речі.
Jimajamma

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.