Нужно вывести большое дерево таксономии. Какие решения посоветуете?

Главные вкладки

Аватар пользователя vadbars@drupal.org vadbars@drupal.org 29 февраля 2012 в 8:57

Вопрос к уважаемому сообществу. Нужно вывести большое дерево таксономии (рубрикатор товаров и услуг): рубрики, подрубрики, ... .
Желательно с указанием количества материалов для каждой рубрики. Важно также, чтобы можно было показывать это дерево компактно - то есть нужна возможность сворачивать/разворачивать ветки и выводить дерево, начиная с определенного уровня.

Задача старая и типичная. Модулей и сниппетов для нее довольно много. (Есть, к примеру, vocabindex).
У каждого рещения свои плюсы и минусы. Чем пользуетесь, что посоветуете?

Комментарии

Аватар пользователя bsyomov bsyomov 29 февраля 2012 в 9:48

Можно написать свой модулёк, который это будет делать, например, взяв за основу один из сниппетов и реализовать всё именно так, как вам нужно - строк 50 php, строк 5 JS. Сниппеты как есть лучше не используйте.
Если будут сложности, пишите в личку, поделюсь исходником примерно такого модуля, только для блока.

Аватар пользователя bsyomov bsyomov 29 февраля 2012 в 9:57

Ну или так, если никаких изысков не понадобится. Но с menu block будет проблема, при произвольной вложенности и необходимости иметь начало дерева на произвольном уровне, без создания дополнительных блоков. И региона под блок может не оказаться на нужном месте в теме, а в контент это решение не выводится.
А ещё в своём модуле можно сделать используя хуки таксономии и nodeapi кеширование довольно гибкое.

Аватар пользователя bsyomov bsyomov 1 марта 2012 в 13:25

"symbiosss" wrote:
taxonomy menu+dhtml+active menu trails могут решить данную задачу

Как эта связка может решить задачу показа части дерева начиная с нужного уровня?

Аватар пользователя katrin@drupal.org katrin@drupal.org 19 марта 2012 в 23:33

Чтобы вывести термины словаря таксономии в виде дерева я пользуюсь таким способом:

<?php
function mymodule_taxonomy_tree($vid) {
$terms = taxonomy_get_tree($vid, 0, -1, NULL);
return theme('item_list', _mymodule_taxonomy_tree($terms));
}

function _mymodule_taxonomy_tree($terms, $parent = 0) {
$items = array();
foreach ($terms as $term) {
if (in_array($parent, $term->parents)) {
$path = 'taxonomy/term/'.$term->tid;
$items[] = array(
'data' => l($term->name, $path),
'children' => _mymodule_taxonomy_tree($terms, $term->tid),
);
}
}
return $items;
}
?>
Таким способом можно выводить с любого уровня, можно здесь по желанию и добавить количество материалов для каждой категории. А показывать это дерево компактно (сворачивать/разворачивать) можно с помощью jquery, например http://jquery.bassistance.de/treeview/demo/.