Вывести таксономию в виде иерархического списка

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

Аватар пользователя Dark_Neo Dark_Neo 30 марта 2010 в 12:54

Добрый день.

Только разбираюсь в Drupal, до этого использовал другие движки, но этот мне почему-то не поддается.

У меня есть создана таксономия в следующем виде:

Материалы
-Категория 1
--Категория 1А
--Категория 1Б
--Категория 1В
-Категория 2
--Категория 2А
--Категория 2Б
--Категория 2В

Как мне с помощью модуля Views вывести ее в таком же виде?

Комментарии

Аватар пользователя nukerster nukerster 30 марта 2010 в 15:53

Во-первых, во Views есть Taxonomy/Terms View, можно попробовать использовать его.
Во-вторых, можно посмотреть тут. Мне самому это в своё время подсказали и мне очень пригодилось!

Аватар пользователя Dark_Neo Dark_Neo 1 апреля 2010 в 17:46

Не совсем то, там показывается список нодов, привязанных к термину, а мне надо список терминов в словаре.

Аватар пользователя Dark_Neo Dark_Neo 6 апреля 2010 в 16:03

Решил все таким вот сниппетом. Может и кривой - но делает то, что нужно.

<?php
$vid 
=1;  // номер словаря
$items = array();
$terms taxonomy_get_tree($vid);

echo 

'<ul>';

foreach (

$terms as $t) {

// это родительская категория
if ($t->parents[0] == 0) {

echo 

'<li>';
echo 
l($t->name"taxonomy/term/$t->tid");
// находим все дочерние для нее
echo '<ul>';
foreach (
$terms as $t1) {
if (
$t1->parents[0] == $t->tid) {
echo 
'<li>';
echo 
l($t1->name"taxonomy/term/$t1->tid");
echo 
'</li>';
}
}
echo 
'</ul>';

echo 

'<li>';

}
}

echo 

'</ul>';
?>
Аватар пользователя Dark_Neo Dark_Neo 7 апреля 2010 в 12:47

Новая версия - работает без глюков))

<?php
$vid 
=1;  // номер словаря
$items = array();
$terms taxonomy_get_tree($vid);

echo 

'<ul class="term_parent">';

foreach (

$terms as $t) {
    
// это родительская категория
    
if ($t->parents[0] == 0) {
        echo 
'<li>';
        echo 
l($t->name"taxonomy/term/$t->tid");
        
// находим все дочерние для нее
        
        
$has_parent false;
        foreach (
$terms as $t99) {
            if (
$t99->parents[0] == $t->tid) {
                
$has_parent true;
            }
        }
        
        if (
$has_parent) {
            echo 
'<ul>';
            foreach (
$terms as $t1) {
                if (
$t1->parents[0] == $t->tid) {
                    echo 
'<li>';
                    echo 
l($t1->name"taxonomy/term/$t1->tid");

                    

// и дочерние категории для текущей, т.е.
                    // максимум три уровня
                    
$has_parent false;
                    foreach (
$terms as $t99) {
                        if (
$t99->parents[0] == $t1->tid) {
                            
$has_parent true;
                        }
                    }                    
                    
                    if (
$has_parent) {
                        echo 
'<ul>';
                        foreach (
$terms as $t2){
                                if (
$t2->parents[0] == $t1->tid) {
                                echo 
'<li>';
                                echo 
l($t2->name"taxonomy/term/$t2->tid");
                                echo 
'</li>';
                            }
                        }
                        echo 
'</ul>';                    
                    }

                    echo 

'</li>';
                }
            }
            echo 
'</ul>';        
        }

        echo 

'</li>';

    }
}

echo 

'</ul>';
?>