Drupal → Вывести термины словаря таксономии в виде дерева

29.02.2012

Имеется словарь tags:

Список терминов таксономии

Задача — вывести термины этого словаря в виде дерева:

Дерево терминов таксономии

Drupal 8:

Хелпер функция:

/**
 * Format terms as item_list items.
 */
function mymodule_format_terms_as_item_list(array $terms, string $parent_id = '0'): array {
  $items = [];

  foreach ($terms as $term) {
    if (in_array($parent_id, $term->parents, TRUE)) {
      $items[] = [
        '#term' => $term,
        'data' => [
          '#markup' => $term->name,
        ],
        'children' => mymodule_format_terms_as_item_list($terms, $term->tid),
      ];
    }
  }

  return $items ? ['#theme' => 'item_list', '#items' => $items] : [];
}

Использование:

$terms = \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree('tags');
$build = mymodule_format_terms_as_item_list($terms);

Drupal 7:

Хелпер функция:

/**
 * Return rendered taxonomy tree.
 */
function mymodule_taxonomy_tree($vocabulary_name) {
  $vid = taxonomy_vocabulary_machine_name_load($vocabulary_name)->vid;
  $terms = taxonomy_get_tree($vid);
  return theme('item_list', array('items' => _mymodule_taxonomy_tree($terms)));
}

/**
 * Helper for mymodule_taxonomy_tree()
 */
function _mymodule_taxonomy_tree($terms, $parent = 0) {
  $items = array();
  
  foreach ($terms as $term) {
    if (in_array($parent, $term->parents)) {
      $items[] = array(
        'data' => $term->name,
        'children' => _mymodule_taxonomy_tree($terms, $term->tid),
      );
    }
  }
  
  return $items;
}

Использование:

echo mymodule_taxonomy_tree('tags');

Полезные статьи:
Вывести термины словаря таксономии в виде дерева с помощью Views Tree.
Программно вывести термины словаря в виде дерева с подсчётом количества материалов.

Написанное актуально для
Drupal 7, Drupal 8+
Похожие записи

Комментарии

Евгений
29.02.2012, 21:05

Еще такую штуку можно замутить через taxonomy_block

neuronaut
05.03.2012, 01:03

спасибо тебе, дружище !
когда то искал очень долго решение...

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

Антон
22.03.2014, 23:15

Спасибо, хорошо, помогло. Лайкаю в соцсети вас.

подскажите как сделать такого плана меню раскрывающимся ? можно классы добавлять expanded.

Добавить комментарий