Как получить название термина таксономии от TID?


32

Многие из наших материалов имеют формат uris, например site/taxonomy/XX, где XX - целое число.

Я нашел много вопросов, таких как « как получить TID от имени? », Но я хотел бы получить имя от TID. Я пытаюсь собрать сценарий крошки, и все отлично, за исключением тех случаев, когда я получаю след вроде " home > term". Вместо этого я хочу иметь это как " home > <TERM NAME>".

Как я могу это сделать?


Отличные ответы. Только для информации: для тех, кто хочет сделать обратное - то есть получить слово от названия термина, есть вопросы и ответы для этого: drupal.stackexchange.com/questions/36594/… Надеюсь, что это полезно в качестве поисковых систем при поиске ответов кажется, не понимают порядок того, что нужно в терминах «от» и «до».
therobyouknow

Ответы:


92

Если вы используете Drupal 7, вы можете использовать taxonomy_term_load()

$term = taxonomy_term_load($tid);
$name = $term->name;

Если у вас есть несколько идентификаторов терминов, вы можете избежать необходимости выполнять один запрос для каждой загрузки, используя taxonomy_term_load_multiple():

$tids = array(1, 2, 3);
$terms = taxonomy_term_load_multiple($tids);

foreach ($terms as $term) {
  $name = $term->name;
}

Если вы застряли в Drupal 6, вы можете использовать taxonomy_get_term():

$term = taxonomy_get_term($tid);
$name = $term->name;

Для Drupal 6 нет опции множественной загрузки, о которой я знаю, к сожалению.


Большое спасибо, я хотел бы получить дополнительный плюс за поддержку версий: D
Броди,

дополнительный вопрос: я думаю, что в том же духе, довольно легко установить его так, чтобы URL читали site / <term name>? или я должен был бы установить это для каждого отдельного термина?
Броди

3
Вы можете сделать это на основе каждого семестра, но это довольно трудоемко. Модуль pathauto был написан как раз для такой ситуации, вы можете использовать его для определения шаблонов для автоматического назначения псевдонимов терминам / content / users / etc.
Клайв

5

Следующая функция возвращает имя термина таксономии на основе его значения:

function get_term($tid) {
  return db_select('taxonomy_term_data', 't')
  ->fields('t', array('name'))
  ->condition('tid', $tid)
  ->execute()
  ->fetchField();
}

1
Не рекомендуется использовать функции базы данных, когда вы можете достичь того же с помощью функции API.
Картагис

4
В некоторых случаях лучше использовать функцию базы данных, потому что функции API загружают большой объем данных
houmem

Также полезно, когда модули разрешения доступа к таксономии ограничивают доступ
Dimetry

5

В Drupal 8 вы можете получить названия терминов таксономии следующим образом:

$term = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->load($tid);

$name = $term->label();

Или загрузить несколько:

$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadMultiple($tids);

foreach($terms as $term) {
  $name = $term->label();
}

Я получаю эту ошибку - Примечание: неопределенное свойство: Drupal \ Core \ Entity \ Plugin \ DataType \ EntityReference :: $ target
Диана,

1

Для D7:

$term = taxonomy_get_term_by_name($term_name, $vocab_name);  
  foreach($term as $key => $data) {  
    $tid = $data->tid;  

    dpm($tid);  

  }  

Для D8:

$term_name = \Drupal\taxonomy\Entity\Term::load(2)->get('name')->value;  
dpm($term_name);  

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