Использование термина таксономии, связанного с материалом через аргумент представления.(перевод статьи)

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

Аватар пользователя Тыдж Тыдж 19 ноября 2008 в 14:42

Использование термина таксономии, связанного с материалом через аргумент в блочном представлении во Views 2, определенно должно быть возможным. В оригинальном модуле Views, PHP обработчиком кода аргумента было свернутое поле (ориг. fieldset) с текстовым полем для ввода кода. В Veiws версии 2.0, пока у нас не появились мега-передовые методы, мы по прежнему нуждаемся в подобном использовании.
Но на самом деле:

«Блочные представления не имеет источника аргументов вообще; они (блочные вьюсы) не способны вытягивать аргументы из ссылки (URL) и часто требуется использование PHP кода чтобы добраться до аргументов».
Итак, если мы зайдем в конфигурирование аргумента, группа «Если аргумента нет, то:» и выберем «Подставить аргумент по умолчанию», появится раздел: «Настройки аргумента по умолчанию», выбираем «PHP Код» и здесь, ниже, появится форма добавления кода.
Это уже ближе к теме, так как мы знаем куда можно поместить код чтобы она работал.
Вникая в логику аргументов и таксономии в Drupal 5, появляются кое-какие заметки:

<?php
if ((arg(0) == 'node') && (is_numeric(arg(1)))) {
$industry_node = node_load(arg(1));
$tids = array_keys($industry_node->taxonomy);
// это будет корректно работать только когда отдельный
// термин связанный с производным (родным,(ориг. indystry))
//материалом – и есть его производный термин
$args[0] = $tids[0];
}
?>

Имейте ввиду, что <?php теги в поле ввода кода обработки аргументов не указываются и приведены сдесь только чтобы указать на использование кода PHP.

(Добавлено позже)
<?php
if ((arg(0) == 'node') && (is_numeric(arg(1)))) {
$node = node_load(arg(1));
$tids = array_keys($node->taxonomy);
// this will only work correctly when the single term associated with a node is its term
$args = $tids;
drupal_set_message('
'. var_export($node,TRUE) .'

');
print("Hey");
print_r('
'. var_export($node,TRUE) .'

');
}
?>

ОК, хорошая новость, что print ничего нигде не выводит, когда вызвана внутри представления.

<?php
'taxonomy' =>
array (
3 =>
stdClass::__set_state(array(
'tid' => '3',
'vid' => '1',
'name' => 'Information Technology',
'description' => '',
'weight' => '0',
)),
),
?>

<?php
if ((arg(0) == 'node') && (is_numeric(arg(1))))
{?$node = node_load(arg(1)); ?$tids = array_keys($node->taxonomy);?
// this will only work correctly when the single term associated
//with a node is its term?$args[0] = $tids[0];?return $tids[0];?}
?>
Поексперементируйте с возвратом implode (‘,’, $tids) и одним из параметров с составными терминами в аргументе.

Дальше не осилил... оригинал статьи.