Как узнать глубину термина

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

Аватар пользователя Dmitriy.ua Dmitriy.ua 1 июня 2011 в 21:12

Есть массив терминов вытащенный из $node, все термины одного словаря и являются вложенными, т.е. по сути это один термин, его подтермин и подтермин подтермина, проблема в том что в массиве вложенность никак не отображается и сортировка тоже не корректная. Нужно для каждого термина определить его вложенность (что бы раскрыть меню в нужное положение). Прошу совета если кто сталкивался, знает.

<?php
Array
(
    [
16] => stdClass Object
        
(
            [
tid] => 16
            
[vid] => 2
            
[name] => Кольорові
            
[description] => 
            [
weight] => 0
        
)

    [

12] => stdClass Object
        
(
            [
tid] => 12
            
[vid] => 2
            
[name] => Xerox
            
[description] => 
            [
weight] => 1
        
)

    [

9] => stdClass Object
        
(
            [
tid] => 9
            
[vid] => 2
            
[name] => Багатофункціональні пристрої
            
[description] => 
            [
weight] => 7
        
)

)

?>

Пока вижу один вариант, в цикле пробовать найти родителя для каждого термина и выставлять соответствующие маркеры. Но мне не нравится...

Комментарии

Аватар пользователя Dmitriy.ua Dmitriy.ua 2 июня 2011 в 9:15

Mafk wrote:
Почитайте http://api.drupal.ru/api/function/taxonomy_get_tree/6

вдруг поможет :)

Не поможет, нужной мне функции в друпал АПИ нет.

Пока сделал та:

<?php
           $terms 
taxonomy_node_get_terms_by_vocabulary($node2'tid');  
           
$depth = array();
           foreach(
$terms as $tid => $term){
                
$depth[$tid] = 0;
                
$parents taxonomy_get_parents($tid'vid'); 
                if(
$parents){
                   
$depth[$tid] = 1
                   
$parents2 taxonomy_get_parents($parents[2]->tid'vid'); 
                   if(
$parents2){
                      
$depth[$tid] = 2
                   }
                } 
           }
           
$depth array_flip($depth);
?>
Аватар пользователя Mafk Mafk 2 июня 2011 в 10:24

Dmitriy.ua wrote:

Не поможет, нужной мне функции в друпал АПИ нет.

А вы попробуйте.
Функция taxonomy_get_tree, вызванная для словаря, возвращает структуру вида:

Array
(
    [0] => stdClass Object
        (
            [tid] => 3
            [vid] => 3
            [name] => Термин 1
            [depth] => 0
            [parents] => Array
                (
                    [0] => 0
                )

    )
)

Как видим глубина термина присутствует(depth)

Аватар пользователя Dmitriy.ua Dmitriy.ua 2 июня 2011 в 11:31

Mafk wrote:
Dmitriy.ua wrote:

Не поможет, нужной мне функции в друпал АПИ нет.

А вы попробуйте.
Функция taxonomy_get_tree, вызванная для словаря, возвращает структуру вида:

Array
(
    [0] => stdClass Object
        (
            [tid] => 3
            [vid] => 3
            [name] => Термин 1
            [depth] => 0
            [parents] => Array
                (
                    [0] => 0
                )

    )
)

Как видим глубина термина присутствует(depth)

Я эту функцию использую в 90% своих модулей, так что не надо ля ля. Прочтите первый пост и попытайтесь понять что я спросил)