Как да подадем аргументи на блок, направен с views?
Освен възможните аргументи като nid, tid, uid или по техните имена подадени с url, на блок или страница съдадни с views може с php от текущо разглежданият нод да се вземат необходимите аргументи за тази цел.
В този пример аргументите са термини от всички речници. Целта е блока да съдържа нодове, които имат същите термини, и съответно резултата да не включва текущия нод.
За да изключим текущия нод от резултата добавяме аргумент Node nid от url маркираме exclude from display най-долу в настрайките.
Добавяме аргумент Term id, за Provide default argument избираме PHP Code и въвеждаме следният код:
<?php if (arg(0) == 'node' && is_numeric(arg(1))) { $node = node_load(arg(1)); $tids = array(); foreach ($node -> taxonomy AS $term) { $tids[] = $term -> tid; } } $arg = implode(',', $tids); return $arg; ?>
Маркираме Allow multiple terms per argument за да можем да подадем повече от един термин в един аргумент.
Всички останали полета, филтри, сортиране настройваме по желание.
Аргумент с термините във вид на списък /tid_1, tid_2, ... tid_n/ ще върне резултат с нодове които съдържат всички термини.
Ако променим
$arg = implode(',', $tids);
$arg = implode('+', $tids);
Можем също така да ограничим термините в аргумента по 1 или повече речника, като променим кода:
foreach ($node -> taxonomy AS $term) { if($term -> vid == 6) { $tids[] = $term -> tid; } }
CCK Field като аргументи
След като сме направили node_load() имаме цялото съдържание на нода в $node и може да подадем като аргументи поле на cck. Заменяме конструкцията foreach с
$arg2 = $node -> field_res_type[0]['value']; $arg3 = $node -> field_quarter[0]['value'];
<?php if (arg(0) == 'node' && is_numeric(arg(1))) { $node = node_load(arg(1)); $arg = $node -> field_res_type[0]['value']; } return $arg; ?>
По същия начин за третия аргумент
$arg = $node -> field_res_type[0]['value'];
$arg = $node -> field_quarter[0]['value'];
Коментари
Публикувай нов коментар