2013-05-29 2 views
0

Après avoir lutté avec le problème de l'affichage des termes enfants pour un terme de taxonomie donné dans un bloc, j'ai finalement trouvé un code qui fait exactement ce que je veux hereDrupal - Afficher les termes enfants du terme courant, uniquement si des éléments enfants existent - modification de code requise

Conformément aux instructions que je l'ai ajouté ce qui suit à mon template.php

function themename_child_terms($vid = 1) { 
    if(arg(0) == 'taxonomy' && arg(1) == 'term') { 
    $children = taxonomy_get_children(arg(2), $vid); 
     if(!$children) { 
     $custom_parent = taxonomy_get_parents(arg(2)); 
      $parent_tree = array(); 
      foreach ($custom_parent as $custom_child => $key) { 
      $parent_tree = taxonomy_get_tree($vid, $key->tid); 
      } 
      $children = $parent_tree; 
     } 

    $output = '<ul>'; 
    foreach ($children as $term) { 
     $output .= '<li>'; 
     $output .= l($term->name, 'taxonomy/term/' . $term->tid); 
     $output .= '</li>'; 
    } 
    $output .= '</ul>'; 

    return $output; 
    } 
} 

J'ai ensuite créé un bloc et a ajouté:

<?php // $vid is the vocabulary id. 
    print themename_child_terms($vid = 1); 
?> 

Ceci montre parfaitement les termes enfants du terme courant. Cependant, il montre TOUS les termes qui existent sous le terme parent, même s'il n'y a pas de contenu utilisant ce terme.

par exemple. visualisation de la page avec tous les éléments à terme 1, je reçois

enfant 1 enfant 2

enfant correctement 3

figurant dans le bloc. Mais s'il n'y a pas de contenu étiqueté avec 'enfant 3' par exemple, il apparaît toujours dans le bloc. Ce n'est pas très utile car il renvoie à une page de termes vide. Comment est-ce que je modifierais le code pour montrer seulement aux enfants qui ont réellement des articles qui leur sont associés. Donc, s'il n'y a pas d'enfants marqués 'Enfant 3', alors ce terme n'apparaîtra pas. Est-ce une modification facile?

Nous vous remercions de votre compréhension.

Nick

Travailler avec Drupal 6

Répondre

0

Merci à jerdiggity utilisateur pour afficher la réponse suivante sur le drupal.stackexchange here. Fonctionne parfaitement.


Hmm ... Je vais essayer quelque chose comme ceci:

Modifier cette partie de votre code:

foreach ($children as $term) { 
    $output .= '<li>'; 
    $output .= l($term->name, 'taxonomy/term/' . $term->tid); 
    $output .= '</li>'; 
} 

à quelque chose comme ceci:

// Avoid unnecessary "Invalid foreach" errors showing up in the log: 
if (!empty($children)) { 
    // If not empty, run the foreach loop: 
    foreach ($children as $term) { 
    // Then check to see if any nodes exist for that term id: 
    $number_of_nodes = taxonomy_term_count_nodes($term->tid); 
    // If there ARE nodes... 
    if ($number_of_nodes > 0) { 
     // ... then add them to the output: 
     $output .= '<li>'; 
     $output .= l($term->name, 'taxonomy/term/' . $term->tid); 
     $output .= '</li>'; 
    } 
    } 
} 

Espoir cela aide ... :)

Questions connexes