Задача.
Имеется древовидный словарь таксономии. Термин, содержащий дочерние термины не может содержать продукты, т.е. продукты "лежат" только в "конечных" терминах (хз как правильно их называть). Есть блок для сайдбара, есть блок для контентной области.
Пусть есть словарь вида:
A
--AA
----AAA
----AAB
----AAC
--AB
B
и ссылка: http://example.com/taxonomy/term/AA
В этом случае в блоке в сайдбаре должны отображаться термины, имеющие с термином в ссылке общего родителя - AA и AB (общий родитель - A). В блоке в контентной области же отобразятся дочерние термины - AAA, AAB и AAC.
На чем я застопорился - вывод "братских категорий". Блок делается с помощью Views и как вывести элементы с общим предком при том, что единственный аргумент - это Taxonomy: Term, я не знаю. Есть у кого-нибудь идеи?
Комментарии
Это задача не для Views! Этот функционал должен обеспечить Menu block модуль в связке с Taxonomy Menu. Советую посмотреть Этот скринкаст.
Попробовал 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', $output, null, 'ul', array('class' => 'category-list')) : '';
}
}
}
?>