2010-07-07 96 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()需要一個節點,而不是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; 
     } 
    } 
    } 
?> 

這將讓其他對象類型至極有一個分類對象可能導致一些混亂,如果這樣堅持下去的arg(0) == 'node'回到

+0

甜 - 它工作得很好!乾杯。 – james6848 2010-07-07 15:05:21

相關問題