Drupal – блоки отображения в соответствии с идентификатором терминов таксономии узла

Я просто пытаюсь ограничить видимость блоков узлами с определенным идентификатором таксономии. Я использую этот фрагмент …:

<?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' .