2010-07-07 7 views
1

J'essaie simplement de restreindre la visibilité des blocs aux noeuds qui ont un ID de taxinomie donné. J'utilise cet extrait ...:Drupal - afficher les blocs en fonction du terme de taxonomie du noeud 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; 
     } 
    } 
    } 
?> 

... mais je reçois pas de joie, le bloc reste caché sur les nœuds concernés.

Des idées?

Vive

Répondre

2

Il ressemble à drupal6 taxonomy_node_get_tree() prend un nœud plutôt qu'un. JNV

La meilleure façon de changer votre code est:

<?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() met en cache des noeuds dans la mémoire de sorte qu'il ne sera pas un grand succès de la performance.

Mais attendez! vous pouvez être en mesure d'affiner encore plus loin ...

menu_get_item() obtiendrez l'élément de menu actuellement chargé lorsque l'objet de noeud est chargé, il appellera taxonomy_node_get_terms(). Ainsi, vous pouvez simplifier à:.

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

Cela obtenir d'autres types d'objets wich ont un objet de taxonomie qui pourrait causer une certaine confusion, le cas échéant coller le arg(0) == 'node' retour dans

+0

Doux - il fonctionne très bien! À votre santé. – james6848

Questions connexes