Вывод терминов таксономии с общим родителем в блок Views [РЕШЕНО]

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

Аватар пользователя gWashington gWashington 20 декабря 2010 в 13:38

Задача.
Имеется древовидный словарь таксономии. Термин, содержащий дочерние термины не может содержать продукты, т.е. продукты "лежат" только в "конечных" терминах (хз как правильно их называть). Есть блок для сайдбара, есть блок для контентной области.

Пусть есть словарь вида:
A
--AA
----AAA
----AAB
----AAC
--AB
B
и ссылка: http://example.com/taxonomy/term/AA

В этом случае в блоке в сайдбаре должны отображаться термины, имеющие с термином в ссылке общего родителя - AA и AB (общий родитель - A). В блоке в контентной области же отобразятся дочерние термины - AAA, AAB и AAC.

На чем я застопорился - вывод "братских категорий". Блок делается с помощью Views и как вывести элементы с общим предком при том, что единственный аргумент - это Taxonomy: Term, я не знаю. Есть у кого-нибудь идеи?

Комментарии

Аватар пользователя gWashington gWashington 13 января 2011 в 11:52

Попробовал Menu Block, он почти подошел, но, к сожалению, отображает "братские категории" к текущей + дочерние категории текущей. А мне дочерние отображать не нужно.
Пришлось создать блок и его содержимое сделать на PHP:


<?php
    $path 
explode('/'drupal_get_normal_path($_GET['q']));
    if (
count($path) >= 3) {
        if ((
$path['0'] == 'taxonomy') && ($path['1'] == 'term') && is_numeric($path['2'])) {
             if (!isset(
$path['3'])) {
                
$term_id = -1;
            }
            else {
                 if (
is_numeric($path['3'])) {
                    
$term_id $path['3'];
                }
                elseif (
$path['3'] == 'all') {
                    
$term_id = -1;
                }
                else {
                    
$term_id = -1;
                }
            }
            if (
$term_id != -1) {
                
$output = array();
                
$parents taxonomy_get_parents($term_id);
                
$parent array_shift($parents);
                
$children_terms taxonomy_get_children($parent -> tid); 
                foreach (
$children_terms as $children_term ) {
                    
$t_children_count taxonomy_term_count_nodes($children_term->tid);
                    
$output[] = l($children_term -> name ' ('$t_children_count .')'
                            
'taxonomy/term/'$children_term -> vid '/' $children_term -> tid
                            array(
'attributes' => array('title' => $children_term -> name)));
                }
                echo 
$output theme('item_list'$outputnull'ul', array('class' => 'category-list')) : '';
            }
        }
    }
?>