Drupal → Программно вывести термины словаря в виде дерева с подсчётом количества материалов
Ранее писал, как программно вывести термины словаря с подсчётом количества материалов и как программно вывести термины словаря в виде дерева. Теперь очередь объединить эти два способа и программно вывести термины словаря в виде дерева с подсчётом количества материалов:
Код:
/** * Return rendered taxonomy tree */ function mymodule_taxonomy_tree($vid) { $terms = db_query(" SELECT td.tid, td.name, th.parent, ( SELECT COUNT(*) FROM {taxonomy_index} ti LEFT JOIN {node} n ON ti.nid = n.nid WHERE ti.tid = td.tid AND n.status = 1 ) node_count FROM {taxonomy_term_data} td INNER JOIN {taxonomy_term_hierarchy} th ON th.tid = td.tid WHERE vid = :vid ORDER BY weight ", array(':vid' => $vid))->fetchAll(); return theme('item_list', array('items' => _mymodule_taxonomy_tree($terms))); } /** * Helper for mymodule_taxonomy_tree() */ function _mymodule_taxonomy_tree($terms, $parent = 0, &$node_count = 0) { $items = array(); $node_count = 0; foreach ($terms as $term) { if ($term->parent == $parent) { $children = _mymodule_taxonomy_tree($terms, $term->tid, $childs_node_count); $node_count += $term->node_count + $childs_node_count; $items[] = array( 'data' => l($term->name, 'catalog/' . $term->tid) . ' (' . ($term->node_count + $childs_node_count) . ')', 'children' => $children, ); } } return $items; }
Использование:
echo mymodule_taxonomy_tree(1);
Для вывода плоского списка можно воспользоваться Views — Как с помощью Views 3 вывести список терминов с количеством помеченных ими нод.
Update 06.02.2013: добавил подсчёт количества нод у дочерних терминов.
Комментарии
А есть возможность при открытой ноде как-то передавать active-trail термину в списке?
А может все таки о кешах упомянешь, а то твой блог читаем много новичков... ;)
А как сделать, чтобы нулевые термины не отображались?
Спасибо!
Добрый вечер!
Подскажите, можно ли зная tid дочернего термина, вывести имя термина родителя?
Раньше использовал модуль Hierarchical Select, который хранил оба параметра в поле.
Теперь же перешел на shs, он лучше дружит с views, но хранит в поле только значение дочернего термина, отсюда и такая проблема.
Благодарю ,,, то что нужно
По умолчанию выводится простой список с вложенными списками дочерних терминов.
Можно ли вывести такое дерево сеткой, т.е. обернуть родителя и влож. список дивом?
А для i18n-дерева код будет сильно отличаться?
Оставить комментарий