[РЕШЕНО] Вывод таксономию с иерархией в Drupal 7 c помошью сниппета

12 ноября 2012 в 17:00
Аватар пользователя ArmRus ArmRus 0 6

Как то нужно было найти снипет с иерархичесским выводом, но ничего достойного не нашел. Везде используются ручная генерация списков, где делать изменения(например добавлять классы или другие аттрибуты к списку могут запутать Smile хотя распутаться очень легко. Вот недавно написал свой сниппет и решил поделиться, может кому пригодится.
-для заметки я в курсе что можно через views выводить - но в данном случае предпочитаю свой вариант, т.к. очень много ньюансов...

И так первым делом Генерируем массив для передачи в функцию темизации theme_item_list();

<?php
    $voc 
MY_VID#Здесь просто можете написать VID нужного словаря
    
$tree taxonomy_get_tree($voc01); #Получаем корневые термины словаря
    
$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;
}
?>

Можно добавлять классы и другие аттрибуты по желанию. ничто не запутано. Я так думаю)
К стати выводит ЛЮБУЮ вложенность терминов
Вопросы? Smile

Комментарии

"АлександрБолт" wrote:
можно пример посмотреть?

Что вы подразумеваете под словом пример? Вам написать список который получается?
Скажу сразу - получается ОБЫЧНЫЙ HTML список, который содержит дерево таксономии любой вложенности.

14 ноября 2012 в 14:50

я не программист я только учусь, многие термины мне не понятны, грубо говоря у меня есть задача вывести меню состоящее из терминов таксономии на страницу, при том меню состоит из картинок терминов, для этой задачи ваш снипет подойдет?
спасибо.

15 ноября 2012 в 10:47

"АлександрБолт" wrote:
вывести меню состоящее из терминов таксономии на страницу, при том меню состоит из картинок терминов, для этой задачи ваш снипет подойдет?

Вам нужно вместо $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($voc01); #Получаем корневые термины словаря
    
$items['title'] = t('Catalog'); # Указываем заголовок списка
    
$items['type'] = 'ul'#отмечаем тип маркированного списка
    
$items['items'] = my_module_get_hierarchy($tree); #генерируем элементы
    
$list theme('item_list',$items);
    return 
$list;
}
?>

и естественно функцию которая чуть выше тоже пишите в этот файл. Не забудьте указать vid словаря

15 ноября 2012 в 16:43

Ниче не пойму, а что куда вставлять?
Вставляю первый код в template.php
а второй в page.tpl и не работает нифига. Что не так делаю?

31 января 2013 в 1:04

"Sadchenko" wrote:
Ниче не пойму, а что куда вставлять?
Вставляю первый код в template.php
а второй в page.tpl и не работает нифига. Что не так делаю?

Во первых чтобы узнать что и куда писать, ПРОЧИТАЙТЕ хотябы названия функций(даже не все а начало имени my_module - примерно означает МОЙ_МОДУЛЬ).
Дальше по тексту:
после первого примера я написал

"xman0011" wrote:
А чтобы вывести это почитайте как создать модуль(материалов больше чем необходимо).

для примера вывода страницы(допустим page callback = my_module_page)

Этим я хотел сказать, что если не знаете что делать прочитайте как создать модуль.

Если вы хотите работать с дурпалом на программном уровне(незнаю как по-другому обозвать кодинг), то изучите для начало API просто копи-пастом правильный сайт не сделаете.

31 января 2013 в 10:43