Я просто пытаюсь ограничить видимость блока узлами, которые имеют определенный идентификатор таксономии. Я использую этот отрывок...:
<?php
$term_id_to_trigger_show_block = 109;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
$terms = taxonomy_node_get_terms(arg(1));
foreach($terms as $term) {
if ($term->tid == $term_id_to_trigger_show_block) {
return TRUE;
}
}
}
?>
... но я не получаю радости, блок остается скрытым на соответствующих узлах.
Какие-либо идеи?
Удачи
Похоже, что в drupal6 taxonomy_node_get_tree() принимает узел, а не nid.
Самый простой способ изменить ваш код:
<?php
$term_id_to_trigger_show_block = 109;
if ((arg(0) == 'node') && is_numeric(arg(1))) {
$node = node_load(arg(1));
$terms = taxonomy_node_get_terms($node);
foreach($terms as $term) {
if ($term->tid == $term_id_to_trigger_show_block) {
return TRUE;
}
}
}
?>
node_load() кэширует узлы в памяти, так что это не будет большим ударом по производительности.
Но подождите! Вы можете усовершенствовать это еще больше...
menu_get_item() получит текущий загруженный пункт меню, когда объект узла будет загружен, он вызовет taxonomy_node_get_terms(). Таким образом, вы можете упростить до:
<?php
$term_id_to_trigger_show_block = 109;
$object = get_menu_item();
if (isset($object->taxonomy)) {
foreach($object->taxonomy as $term) {
if ($term->tid == $term_id_to_trigger_show_block) {
return TRUE;
}
}
}
?>
Это получит другие типы объектов, которые имеют объект taxonomy, что может вызвать некоторую путаницу, если так, то вставьте arg(0) == 'node'
обратно.