[spip-dev] cherche alternative pour #TOTAL_BOUCLE

Salut,

pour compter tous les messages de forum d'un auteur dans une rubrique spécifique je viens de bricoler la boucle suivante :
<BOUCLE_messages(FORUMS){id_parent=0}{email_auteur=#ENV{email}}{tout}><BOUCLE_a(ARTICLES){id_article}{id_rubrique=48}> </BOUCLE_a></BOUCLE_messages>#TOTAL_BOUCLE</B_messages><//B_messages>

Le point essentiel dans cette construction est l'espace à l'intérieur de la boucle _a - le compteur est seulement incrémenté si quelque chose est affiché à l'intérieur de la boucle dont il doit compter les itérations.

Ce comportement exclut l'utilisation de la boucle suivante pour compter le nombre d'éléments dans la bdd :

<BOUCLE_messages(FORUMS){id_parent=0}(FORUMS){id_parent=0}></BOUCLE_messages>#TOTAL_BOUCLE<//BOUCLE_messages>

Le résultat affiché par #TOTAL_BOUCLE est toujours zéro ou NULL.

Est-ce qu'il y a une autre construction qu'on peut utiliser avec SPIP pour compter d'une manière fiable sans bricoler ?

Merci, klaus++

* klaus++ tapuscrivait, le 11/06/2009 19:04:

Salut,

pour compter tous les messages de forum d'un auteur dans une rubrique spécifique je viens de bricoler la boucle suivante :
<BOUCLE_messages(FORUMS){id_parent=0}{email_auteur=#ENV{email}}{tout}><BOUCLE_a(ARTICLES){id_article}{id_rubrique=48}> </BOUCLE_a></BOUCLE_messages>#TOTAL_BOUCLE</B_messages><//B_messages>

Le point essentiel dans cette construction est l'espace à l'intérieur de la boucle _a - le compteur est seulement incrémenté si quelque chose est affiché à l'intérieur de la boucle dont il doit compter les itérations.

Ce comportement exclut l'utilisation de la boucle suivante pour compter le nombre d'éléments dans la bdd :

<BOUCLE_messages(FORUMS){id_parent=0}(FORUMS){id_parent=0}></BOUCLE_messages>#TOTAL_BOUCLE<//BOUCLE_messages>

Le résultat affiché par #TOTAL_BOUCLE est toujours zéro ou NULL.

Est-ce qu'il y a une autre construction qu'on peut utiliser avec SPIP pour compter d'une manière fiable sans bricoler ?

{plat} ?

Non, il vaut bien le nombre d'éléments (mais je ne comprends pas ce critere {FORUMS}: n'aurais-tu pas une ereur de compil ?)

Committo,Ergo:Sum

<BOUCLE_messages(FORUMS){id_parent=0}(FORUMS){id_parent=0}></BOUCLE_messages>#TOTAL_BOUCLE<//BOUCLE_messages>

J'ai fait une erreur de copier/coller
Je voulais dire
<BOUCLE_messages(FORUMS){id_parent=0}>

Si je te comprends bien, la boucle
<BOUCLE_messages(FORUMS){id_parent=0}></BOUCLE_messages>#TOTAL_BOUCLE<//BOUCLE_messages>
devrait bien retourner "50" s'il y a 50 messages dans la table spip_forum dont id-parent est 0.

J'ai testé encore une fois:

Je viens de réinstaller SPIP avec la dernière version svn \trac\spip\branches\spip-2.0 :
<BOUCLE_messages(FORUMS){tout}> </BOUCLE_messages>#TOTAL_BOUCLE </B_messages>
(avec espace) retourne 23824

<BOUCLE_messages(FORUMS){tout}></BOUCLE_messages>#TOTAL_BOUCLE</B_messages>
(sans espace) ne retourne rien

Est-ce normal?

klaus++

<BOUCLE_messages(FORUMS){tout}> </BOUCLE_messages>#TOTAL_BOUCLE </B_messages>
(avec espace) retourne 23824

<BOUCLE_messages(FORUMS){tout}></BOUCLE_messages>#TOTAL_BOUCLE</B_messages>
(sans espace) ne retourne rien

évidemment, c'est <//B_messages> qu'il faut dans le 2e cas, pas </B_messages>.

Je signale aussi une écriture plus courte:

<BOUCLE_messages(FORUMS){tout} />#TOTAL_BOUCLE<//B_messages>

Committo,Ergo:Sum

Merci Emmanuel,

je partais du principe que dans les deux cas (avec ou sans espace) la quantité d'éléments dans la bdd était la même et qu'il fallait alors placer #TOTAL_BOUCLE entre </BOUCLE_messages>#TOTAL_BOUCLE</B_messages> dans les deux cas.

Ce que je n'avais pas compris c'est que ce n'est pas la quantité des éléments qui correspondent aux critères de recherche qui fait que le texte avant </B_messages> est affiché mais qu'il faut afficher au moins un de ces éléments à l'intérieur de la boucle pour déclencher l'exécution de cette partie du code (et l'inverse pour le code avant <//B_messages>).

Est-ce que c'est pareil pour les boucles avec le critère !doublons et pour les boucles TABLEAU ?

Bonne soirée et bonne nuit,
klaus++

Committo,Ergo:sum schrieb:

Pour toutes les boucles, le test se fait sur le nombre de caractères émis par le corps de la boucle, pas sur le nombre de "rows" trouvé par SQL. En particulier

<BOUCLE1(ARTICLES)>[(#TITRE|filtre_renvoyant_toujours_vide)]</BOUCLE1>#TOTAL_BOUCLE<//B1>

renverra le nombre d'articles dans la base. Pour les doublons, c'est traduit par un IN de SQL, ça rentre donc dans le cas général.

Committo,Ergo:Sum

<BOUCLE_messages(FORUMS){id_parent=0}(FORUMS){id_parent=0}></BOUCLE_messages>#TOTAL_BOUCLE<//BOUCLE_messages>

Le résultat affiché par #TOTAL_BOUCLE est toujours zéro ou NULL.

Non, il vaut bien le nombre d’éléments (mais je ne comprends pas ce critere {FORUMS}: n’aurais-tu pas une ereur de compil ?)

oui c’est un problème de syntaxe, ici. Il faut écrire

<BOUCLE_messages(FORUMS){id_parent=0}></BOUCLE_messages>#TOTAL_BOUCLE<//B_messages>

qui peut même s’écrire

<BOUCLE_messages(FORUMS){id_parent=0} />#TOTAL_BOUCLE<//B_messages>

Comme la boucle est vide, il faut être dans la partie <//B_messages> pour voir #TOTAL_BOUCLE

Cédric