Я просто пытаюсь ограничить видимость блоков узлами с определенным идентификатором таксономии. Я использую этот фрагмент …:
<?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 () занимает узел, а не ник.
Самый простой способ изменить код:
<?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; } } } ?>
Это приведет к другим типам объектов, у которых есть объект таксономии, который может вызвать некоторую путаницу, если при этом arg(0) == 'node'
.