Цикл по родителям таксономии
Как я могу просмотреть таксономию в drupal 8. Я нашел эту статическую функцию, но требуется TID, как я могу выполнить цикл по всей таксономии без использования TID?
Drupal::entityManager()->getStorage('taxonomy_term')->loadAllParents($tid);
2 answers
Я думаю, что вы неправильно используете слово "родитель".
Термины словаря могут быть отсортированы в дереве. И родители определенного термина являются теми, кто выше в этой иерархии. Итак, если вы хотите, чтобы все родители термина, конечно, вам нужно так сказать, какой термин и указать его идентификатор как $tid.
Однако, если вам просто нужны все термины таксономии, вы можете вместо этого использовать loadTree($vid). $vid - это идентификатор вашего словарного запаса.
Если вы хотите загрузить все термины таксономии, игнорируя к какому словарю они принадлежат, тогда это лучшее решение:
$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadMultiple();
Затем, чтобы получить доступ к данным термина, выполните
foreach ($terms as $term) {
$tid = $term->id();
$vid = $term->getVocabularyId();
$name = $term->getName();
}
Если все, что вам нужно, это идентификаторы всех терминов, этого достаточно:
$tids = \Drupal::entityQuery('taxonomy_term')->execute();
Я сам разобрался, прокрутив таблицу с помощью API базы данных
public function getTaxonomy(){
$query = db_query("SELECT * FROM taxonomy_term_field_data");
$taxonomy = [];
foreach($query as $val){
$taxonomy[] = array(
'tid' => $val->tid,
'vid' => $val->vid,
'name' => $val->name
);
}
return $taxonomy;
}
РЕДАКТИРОВАТЬ: Все же лучшее решение с api вместо использования ручного SQL-запроса, согласно предложению Eyal.
public function getTaxonomy(){
$terms = \Drupal::database()->select('taxonomy_term_field_data', 'td')->fields('td')->execute()->fetchAll();
$taxonomy = [];
foreach($terms as $val){
$taxonomy[] = array(
'tid' => $val->tid,
'vid' => $val->vid,
'name' => $val->name
);
}
return $taxonomy;
}