Как то нужно было найти снипет с иерархичесским выводом, но ничего достойного не нашел. Везде используются ручная генерация списков, где делать изменения(например добавлять классы или другие аттрибуты к списку могут запутать хотя распутаться очень легко. Вот недавно написал свой сниппет и решил поделиться, может кому пригодится.
-для заметки я в курсе что можно через views выводить - но в данном случае предпочитаю свой вариант, т.к. очень много ньюансов...
И так первым делом Генерируем массив для передачи в функцию темизации theme_item_list();
<?php
$voc = MY_VID; #Здесь просто можете написать VID нужного словаря
$tree = taxonomy_get_tree($voc, 0, 1); #Получаем корневые термины словаря
$items['title'] = t('Catalog'); # Указываем заголовок списка
$items['type'] = 'ul'; #отмечаем тип маркированного списка
$items['items'] = my_module_get_hierarchy($tree); #генерируем элементы
$list = theme('item_list',$items);
?>
Осталось отрендерить и вывести.
А вот собственно код для генерации элементов(терминов)
<?php
function my_module_get_hierarchy($terms) {
$items = array();
$current = 0;
foreach ($terms as $term) {
$items[$current]['data'] = l($term->name, 'taxonomy/term/' . ($term->tid));
#Прописываем в список текущий элемент
if($childs = taxonomy_get_children($term->tid)){
$items[$current]['children'] = my_module_get_hierarchy($childs);
#Проверяем если есть дочерные термины - рекурсивно заполняем их
}
$current++;
}
return $items;
}
?>
Можно добавлять классы и другие аттрибуты по желанию. ничто не запутано. Я так думаю)
К стати выводит ЛЮБУЮ вложенность терминов
Вопросы?
Комментарии
можно пример посмотреть?
Что вы подразумеваете под словом пример? Вам написать список который получается?
Скажу сразу - получается ОБЫЧНЫЙ HTML список, который содержит дерево таксономии любой вложенности.
я не программист я только учусь, многие термины мне не понятны, грубо говоря у меня есть задача вывести меню состоящее из терминов таксономии на страницу, при том меню состоит из картинок терминов, для этой задачи ваш снипет подойдет?
спасибо.
Вам нужно вместо $term->name прописать вывод Картинки. А картинку вы можете получить с помощью field_view_filed
Т.е. в вашем случае должно получится что-то на подобие
<?php
function my_module_get_hierarchy($terms) {
$items = array();
$current = 0;
foreach ($terms as $term) {
$image = field_view_field('taxonomy',$term,'field_image');
$items[$current]['data'] = l($image, 'taxonomy/term/' . ($term->tid),array('html' => TRUE));
#Прописываем в список текущий элемент
if($childs = taxonomy_get_children($term->tid)){
$items[$current]['children'] = my_module_get_hierarchy($childs);
#Проверяем если есть дочерные термины - рекурсивно заполняем их
}
$current++;
}
return $items;
}
?>
Нет времени проверить код - попробуйте, должно сработать.
А чтобы вывести это почитайте как создать модуль(материалов больше чем необходимо).
для примера вывода страницы(допустим page callback = my_module_page)
<?php
function my_module_page(){
$voc = MY_VID; #Здесь просто можете написать VID нужного словаря
$tree = taxonomy_get_tree($voc, 0, 1); #Получаем корневые термины словаря
$items['title'] = t('Catalog'); # Указываем заголовок списка
$items['type'] = 'ul'; #отмечаем тип маркированного списка
$items['items'] = my_module_get_hierarchy($tree); #генерируем элементы
$list = theme('item_list',$items);
return $list;
}
?>
и естественно функцию которая чуть выше тоже пишите в этот файл. Не забудьте указать vid словаря
Ниче не пойму, а что куда вставлять?
Вставляю первый код в template.php
а второй в page.tpl и не работает нифига. Что не так делаю?
Во первых чтобы узнать что и куда писать, ПРОЧИТАЙТЕ хотябы названия функций(даже не все а начало имени my_module - примерно означает МОЙ_МОДУЛЬ).
Дальше по тексту:
после первого примера я написал
Этим я хотел сказать, что если не знаете что делать прочитайте как создать модуль.
Если вы хотите работать с дурпалом на программном уровне(незнаю как по-другому обозвать кодинг), то изучите для начало API просто копи-пастом правильный сайт не сделаете.