2009-10-28 7 views
2

Je veux créer une liste de termes de catégorie (contenu dans un bloc), chaque terme à suivre par un décompte du nombre de noeuds avec ce terme, par exemple:Comment créer un compte de nœud pour chaque terme de catégorie dans Drupal?

Cats (5) 
Dogs (4) 
Elephants (2) 

Il y a un certain nombre de modules qui créent des listes entières comme celle-ci de manière dynamique, mais j'ai trouvé qu'ils ont tous des inconvénients pour mes fins. J'ai juste besoin de quelque chose comme ceci:

<ul> 
<li><a href="mylink">Cats</a> (<?php ...some code... ?>)</li> 
<li><a href="mylink">Dogs</a> (<?php ...some code... ?>)</li> 
<li><a href="mylink">Elephants</a> (<?php ...some code... ?>)</li> 
</ul> 

I.e. J'ai seulement besoin que le compte soit dynamique, pas toute la liste (c'est OK parce que les termes eux-mêmes ne changeront pas). J'ai entendu dire que la fonction Drupal taxonomy_term_count_nodes() peut être utile, mais je ne trouve aucune information simple concernant son implémentation.

Répondre

8

Quelles informations souhaitez-vous concernant sa mise en œuvre? The documentation semble assez clair ...

<?php print taxonomy_term_count_nodes($term_id); ?> 
+0

Eh bien, il est clair maintenant, je sais que tu peux le faire comme ça. Merci! – james6848

3

Je l'ai fait plusieurs fois. IMO il est préférable d'utiliser Views pour créer une vue Node qui ne fait que lister les termes Taxonomy, puis utiliser le module http://drupal.org/project/views_groupby pour mettre le nombre de nœuds avec ce terme à côté du terme. L'exemple du views_groupby documentation vous indique ce que vous devez savoir.

Votre module personnalisé sera évidemment un peu plus flexible, mais finalement inutile compte tenu de ce qui précède.

2

Je ne sais pas non plus quelles informations vous manquent dans la documentation - peut-être qu'un exemple vous aide. Ce qui suit va créer une liste ordonnée de tous les termes dans un vocabulaire, avec leurs comptes de nœuds attachés (non testés, donc il peut y avoir des fautes de frappe).

// Adjust this to the id of the vocabulary holding your terms 
$vid = 1; 
// Grab all terms in that vocabulary 
$terms = taxonomy_get_tree($vid); 
$items = array(); 
foreach ($terms as $term) { 
    // Get the number of (published) nodes with that term 
    $count = taxonomy_term_count_nodes($term->tid); 
    // Assemble your link text 
    $text = $term->name . ' (' . $count . ')'; 
    // Set this to the path you want to link to (default term views used here) 
    $path = 'taxonomy/term/' . $term->tid; 
    // Turn the above into a rendered link 
    $link = l($text, $path); 
    // Add to items 
    $items[] = $link; 
} 
// Render array as an ordered list 
$list = theme('item_list', $items, NULL, 'ol'); 

print $list; 
0

Si vous obtenez seulement 10 résultats avec taxonomy_select_nodes qui est parce que Pager est définie sur true par par défaut dans cette fonction vous aurez donc besoin de ti faire comme ça avec « faux »:

$data = taxonomy_select_nodes($term_id, FALSE); 
$count = count($data);