En particulier, je veux savoir comment obtenir dans la boucle le COUNT sql du nombre de lignes trouvées, lorsque j'utilise par ex. {fusion lang}. Est-ce possible ?
Dans la doc. SPIP SPIP 1.9.2 - SPIP on le
mentionne seulement en passant.
En particulier, je veux savoir comment obtenir dans la boucle le COUNT
sql du nombre de lignes trouvées, lorsque j'utilise par ex. {fusion
lang}. Est-ce possible ?
Un exemple pour afficher un menu de langues uniquement s'il y en a plus d'une utilisée dans le site :
<BOUCLE_PlusDuneLangue(ARTICLES){par lang}{fusion lang}{1,1}>
<div id="menulangue">
<a name="formulaire_menu_lang" id="formulaire_menu_lang"></a>
<BOUCLE_ArticlePrincipal(ARTICLES){id_article=#ENV{id_article}}>
<BOUCLE_Traductions(ARTICLES){traduction}{par lang}{" | "}>[<#EXPOSE{span class="languencours",a href="spip.php?action=converser&var_lang=#LANG&redirect=#URL_ARTICLE"}>(#LANG)</#EXPOSE{span ,a}> ]</BOUCLE_Traductions>
</BOUCLE_ArticlePrincipal>
<BOUCLE_ListeLangue(ARTICLES){par lang}{fusion lang}{" | "}>
[<#EXPOSE{span class="languencours",a href="spip.php?action=converser&var_lang=#LANG&redirect=#SELF"}>(#LANG)</#EXPOSE{span ,a}> ]
</BOUCLE_ListeLangue>
<//B_ArticlePrincipal>
</div>
</BOUCLE_PlusDuneLangue>
Critère aussi utilisé dans le plugin svn://zone.spip.org/spip-zone/_plugins_/menu_langues_liens
Un exemple pour afficher un menu de langues uniquement s'il y en a plus
d'une utilisée dans le site :
<BOUCLE_PlusDuneLangue(ARTICLES){par lang}{fusion lang}{1,1}>
Merci, RealET,
Oui j'arrive à faire tourner une boucle comme celle-ci sans problème :
qui me donne une liste de langues. Mais mon problème, c'est que j'ai besoin de connaître le COUNT -- c'est souvent pour cela qu'on utilise un GROUP BY n'est-ce pas ?
C'est à dire j'ai besoin de traduire en SPIP la requête SQL :
SELECT COUNT(id), lang FROM `trad_lang` WHERE status = '' GROUP BY lang
Un exemple pour afficher un menu de langues uniquement s'il y en a plus
d'une utilisée dans le site :
<BOUCLE_PlusDuneLangue(ARTICLES){par lang}{fusion lang}{1,1}>
Merci, RealET,
Oui j'arrive à faire tourner une boucle comme celle-ci sans problème :
qui me donne une liste de langues. Mais mon problème, c'est que j'ai
besoin de connaître le COUNT -- c'est souvent pour cela qu'on utilise un
GROUP BY n'est-ce pas ?
C'est à dire j'ai besoin de traduire en SPIP la requête SQL :
SELECT COUNT(id), lang FROM `trad_lang` WHERE status = '' GROUP BY lang
?? tiens, et peut être faut préciser pour le total boucle :
<BOUCLE_count_bilan(trad_lang){status = ‹ ›}{lang=#LANG}/> #_count_bilan:TOTAL_BOUCLE
<//B_count_bilan>
cela me donne une liste comme :
----- ar
39 bg
39 bn
39 ca
39 cs
39 da
39 de
39 en
39 es
39 et (ou 39 est le nombre de langues)
et je veux ce qui me donne
SELECT COUNT(id), lang FROM `trad_lang` WHERE status = '' GROUP BY lang
c.à dire le nombre de traductions par langue :
COUNT(id) lang
97 ar
96 bg
11 bn
13 ca
92 cs
96 da
98 de
102 en
98 es
94 et
trad_lang, j'ai pas pu tester car c'est une table d'un plugin.
Mais
<BOUCLE_bilan(ARTICLES){fusion lang}>
#LANG<BOUCLE_count_bilan(ARTICLES){lang=#LANG} /> #TOTAL_BOUCLE <br /><//B_count_bilan>
</BOUCLE_bilan>
on tripote le critère pour faire une 'auto'-jointure
(spip_articles->spip_articles) et on précise bien (à
cause des alias) le nom de la table du champ 'lang'
on obtient ainsi la requête :
SELECT COUNT(L1.id_article) AS compteur_articles,
articles.lang,
articles.titre
FROM spip_articles AS `articles`
INNER JOIN spip_articles AS L1
ON L1.id_article = articles.id_article
WHERE articles.statut = 'publie'
GROUP BY articles.lang
attention !
on remarquera que le critère {tout} n'est pas reconnu,
dans le sens où la condition WHERE articles.statut = 'publie'
est quand même ajoutée dans la requête.
Pour #TOTAL_UNIQUE, c’est un total, donc :
<BOUCLE_bilan(trad_lang){par lang}>
[(#LANG|unique) - #TOTAL_UNIQUE{lang} ]
</BOUCLE_bilan> #TOTAL_UNIQUE > comparer avec #TOTAL_BOUCLE
</B_bilan>
Sinon, à l’intérieur de la boucle t’auras un compteur boucle lourdo.
Tu peux jouer sur le fait que tu classes par ce que tu affiches en unique, mais c’est pas top, puisque le total s’affiche dans le résultat suivant de la boucle :
<BOUCLE_maboucle(…){par balise}> #SET{valeur_en_cours,#BALISE}