guiderdoni.net

Bloc notes : spip, css, xhtml, web, standards, mac ...

Accueil > Spip > Afficher le nombre d’articles liés à un mot clé dans un menu

Articles de cette rubrique

Articles

publie le dimanche 8 février 2009 par Alexandra

Afficher le nombre d’articles liés à un mot clé dans un menu

Problématique :

Dans un menu de mot clé, afficher le nombre d’articles liés à ce mot clé. Naïvement, j’avais d’abord pensé à la boucle suivante :

<div id="menucase">
<B_mot>
<h1>Cat&#233;gories</h1>
<ul class="vert-one">
<BOUCLE_mot(MOTS){id_groupe=1}{par num titre, titre}>
<!-- DEBUT BOUCLE_articledesmotscles-->
                    <BOUCLE_articledesmotscles(ARTICLES){id_groupe=1}{id_mot}>
              #SET{total,#GRAND_TOTAL}
                    </BOUCLE_articledesmotscles>
<!-- FIN BOUCLE_articledesmotscles-->
[<li><a href="#URL_MOT" title="[(#TITRE|textebrut|entites_html)]" [(#EXPOSER|class='current')]>(#TITRE) <span class="noir">#GET{total}</span></a></li>]
</BOUCLE_mot>
</ul>
</div>

Ma boucle ne marchait que si chaque mot clé avait au moins un article.
S’il n’y avait pas d’article rattaché à ce mot clé, et donc si l’itération de la boucle était vide, le #GET n’était pas recalculé et m’affichait le dernier résultat trouvé.

Marcimat a donc encore une fois volé à mon secours.

Ce qu’il convient de faire :

- Ne calculer le #GRAND_TOTAL qu’une seule fois, et pas à chaque itération
- Si la boucle a un résultat on affiche le compteur une seule fois après,
</BOUCLEx> une seule fois après #SET{total,#GRAND_TOTAL}
- Si la boucle n’a pas de résultat on affiche zéro,
</Bx>afficher zéro s'il n'y a pas de résultat #SET{total,0}

Première boucle possible :

<div id="menucase">
<B_mot>
<h1>Cat&#233;gories</h1>
<ul class="vert-one">
<BOUCLE_mot(MOTS){id_groupe=1}{par num titre, titre}>
<BOUCLE_articledesmotscles(ARTICLES){id_groupe=1}{id_mot}>
</BOUCLE_articledesmotscles>
#SET{total,#GRAND_TOTAL}
</B_articledesmotsclés>
#SET{total,0}
<//B_articledesmotscles>
[<li><a href="#URL_MOT" title="[(#TITRE|textebrut|entites_html)]" [(#EXPOSER|class='current')]>(#TITRE) <span class="noir">#GET{total}</span></a></li>]
</BOUCLE_mot>
</ul>
</div>

Deuxième boucle possible :

- Mettre un #SET{total,0} avant la boucle
- Ne pas mettre de <//B dans sa boucle

<div id="menucase">
<B_mot>
<h1>Cat&#233;gories</h1>
<ul class="vert-one">
<BOUCLE_mot(MOTS){id_groupe=1}{par num titre, titre}>
#SET{total,0}
<BOUCLE_articledesmotscles(ARTICLES){id_groupe=1}{id_mot}>
</BOUCLE_articledesmotscles>
#SET{total,#GRAND_TOTAL}
</B_articledesmotscles>
[<li><a href="#URL_MOT" title="[(#TITRE|textebrut|entites_html)]" [(#EXPOSER|class='current')]>(#TITRE) <span class="noir">#GET{total}</span></a></li>]
</BOUCLE_mot>

</ul>
</div>

Je vous renvoie à la syntaxe complète des boucles si les choses demeuraient encore obscures.

Avec Bonux

Il paraîtrait que la chose se soit considérablement simplifiée avec l’usage du plugin Bonux en SPIP 2.0.3. Cela pourrait donner la boucle suivante :

<BOUCLE_mot(MOTS){id_groupe=1}{par num titre, titre}{compteur articles}>
#COMPTEUR{articles}
ou #COMPTEUR_ARTICLES
</BOUCLE_mot>

La syntaxe est à vérifier pour #COMPTEUR{articles} ou le #COMPTEUR_ARTICLES

Forum

Répondre à cet article

1 commentaire

Afficher le nombre d’articles liés à un mot clé dans un menu

La boucle suivante a l’air de fonctionner aussi :

<ul>                                <BOUCLE_mot(MOTS){id_groupe=1}{par num titre, titre}>
<li>
<a href="#URL_MOT" title="[(#TITRE)]">[(#TITRE) ]</a>
<span class>                                <BOUCLE_articledesmotscles(ARTICLES){id_groupe=5}{id_mot}{id_rubrique}>
</BOUCLE_articledesmotscles>(#GRAND_TOTAL)
</B_articledesmotscles>
</span>
</li>
</BOUCLE_mot>
</ul>
22 février 2009, par Gaëlle - repondre message
2005-2017 - Contenu en GPL http://www.guiderdoni.net - Site réalisé avec SPIP 
rechercher - plan du site - prive - alexandra.guiderdoni@gmail.com
CSS - XHTML - squelette