2010-07-07 3 views
1

특정 분류 ID가있는 노드로 블록 가시성을 제한하려고합니다. 이 스 니펫을 사용하고 있습니다 ... :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

관련 문제