Пусть у нас есть таксономия, скажем, departments, которая отражает структуру предприятия. Она имеет вид, в скобках указаны ноды имеющие данные термины:
|
|---IT (About IT)
| |
| |---Managers (Lena, Petya)
| |---Programmers (Nataly)
| |---Admins (Vasily)
|---Research (About Research)
|---Managers (Sergey)
|---Scientists (Max, Vitaly)
Ноды могут иметь термины любого уровня вложенности, то есть есть, например ноды с термином IT и есть IT/Admins
Pathauto настроен таким образом, что для каждой ноды генерится путь вида IT/Admins/Vasily, тут всё в порядке.
Мне хотелось бы чтобы view выводил все ноды, имеющий термин указанный в аргументе и только его, без терминов ниже по иерархии.
Например, при аргументе Research должна выводится только нода About Research, при аргументе IT/Managers выводились бы ноды Lena и Petya. Аргументы Managers и IT/Scientists должны выдавать ошибку, потому что ломают структуру.
Пример который идёт вместе с views выдаёт все ноды ниже по иерархии, если в нём убрать Taxonomy: Term ID depth modifier, то теряется возможность использовать вложенность.
Вопрос, скорее всего ламерский, но не смог я на него найти ответа
Заранее спасибо за помощь.
Комментарии
Решение оказалось не особо тривиальным
Нужно создать views с аргументом TermID, поставить валидацию php и вставить такой код:
<?php
$result=TRUE;
$parent=0;
$term_ok=-1;
foreach($view->args as $arg){
$terms=taxonomy_get_term_by_name($arg);
if (empty($terms)){ //Test if term exists
$result=FALSE;
break;
}else{
foreach ($terms as $term) {
$cur_parents = taxonomy_get_parents($term->tid);
if ( (empty($cur_parents)) && ($parent===0) ){
$parent=$term->tid;
$term_ok=$term;
break;
}else{
foreach($cur_parents as $cur_parent){
if ($cur_parent->tid===$parent){
$parent=$term->tid;
$term_ok=$term;
break 2;
}
}
$result=FALSE;
break 2;
}
}
}
}
$handler->argument=$term_ok->tid;
return $result;
?>