2010-07-07 5 views
1

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

<?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; 
     } 
    } 
    } 
?> 

... но я не получаю радости, блок остается скрытым на соответствующих узлах.

Любые идеи?

Приветствия

ответ

2

Похоже, в 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' назад в

+0

Сладкое - это прекрасно работает! Приветствия. – james6848

Смежные вопросы