At 22:45 +0100 14/12/01, Patrick Atlas wrote:
Merci très sympa pour cette réponse rapide.
Il me semblait bien qu'avec la syntaxe SPIP ce n'était pas simple.
Je ne savait pas que l'on pouvait mettre du php dans les squelettes.
Si si, la syntaxe SPIP est très simple. Fil maîtrise bien PHP, donc il a tendance à privilégier cette solution qui, souvent, donne un code plus court. Cependant, on peut dans de nombreux cas se contenter des boucles de SPIP, à condition de trouver des solutions originales.
Dans ton cas (afficher les articles dans un tableau), voici une solution assez rigolote:
===============
<BOUCLE_principale(RUBRIQUES){id_rubrique}>
<h1>#TITRE</h1>
<B_articles>
<table border=1>
<BOUCLE_articles(ARTICLES){id_rubrique}{1/3}>
<B_ligne><tr>
<BOUCLE_ligne(ARTICLES){id_rubrique}{par titre}{0,3}{doublons}>
<td>#TITRE</td>
</BOUCLE_ligne>
</tr></B_ligne>
</BOUCLE_articles>
</table>
</B_articles>
</BOUCLE_principale>
La BOUCLE_principale est la "grande" boucle de ta page de rubrique, elle affiche la rubrique passée en URL.
Ensuite, tout se joue en deux boucles très simples.
BOUCLE_articles ne sert en réalité pas directement. Elle n'affiche rien, elle se contente de "faire tourner" la BOUCLE_ligne un certain nombre de fois. À chaque fois que la BOUCLE_articles a un "résultat", la BOUCLE_ligne est effectuée.
Le nombre de "réponses" que la BOUCLE_articles va donner est connu: il s'agit d'1/3 du nombre d'articles contenus dans cette rubrique. Donc, si on a 18 articles dans la rubrique, la BOUCLE_articles ne sert qu'à effectuer 6 fois la BOUCLE_ligne (qui est à l'intérieur).
La BOUCLE_ligne est donc "déclenchée" à chaque réponse de la BOUCLE_articles (6 fois, donc). Mais elle n'utilise pas les informations récupérées par la BOUCLE_articles: elle va directement récupérer, sans se préoccuper du résultat de la boucle précédente :
- (ARTICLES) -> les articles;
- {id_rubrique} -> contenus dans cette rubrique;
- {par titre} -> classés par titre;
- {0,3} -> elle n'en affiche que 3;
- {doublons} -> elle n'affiche jamais deux fois les mêmes articles.
Si tu supprimes le critère {doublons}, tu vas constater que ta page affiche 6 lignes contenant toujours les 3 mêmes articles. En effet, le critère {doublons} doit être compris comme "ne pas afficher les articles déjà affichés", ou encore "prendre les 3 articles suivants".
Le principe développé de cette boucle:
Première itération de BOUCLE_articles
- Afficher trois articles de la rubrique avec BOUCLE_ligne
Deuxième itération de BOUCLE_articles
- Afficher les trois premiers articles de la rubrique,
qui n'ont pas encore été affichés par BOUCLE_ligne
(traduire: prendre les trois articles suivants)
...
Dernière itération de BOUCLE_articles
- Afficher les articles suivants...
Remarque: si tu supprimes le critère {1/3} dans ta BOUCLE_articles, ta page est absolument identique à la version précédente. En effet, on va répéter la BOUCLE_ligne qui n'affiche que les articles qui n'ont pas encore été affichés. Dans notre cas, si tu supprimes le critère {1/3}, il va y avoir 18 itérations de BOUCLE_articles (c'est-à-dire le nombre total d'articles dans la rubrique); mais après la 6-ème itération, tous les articles auront été affichés. Donc BOUCLE_ligne, à cause de {doublons}, n'aura plus rien à afficher (elle aura épuisé le stock d'articles).
Le critère {1/3} est donc relativement inutile. En réalité, il s'agit d'éviter que SPIP fasse trop d'itérations inutiles. Ici, les 12 itérations inutiles signifient que SPIP va effectuer 12 requêtes mySQL dont nous savons à l'avance qu'elles n'auront aucune réponse - ça n'est pas bien grave, mais ça n'est pas très propre.
Evidemment, ensuite il faut placer les <table>, <tr> et <td> aux bons endroits (dans le "texte conditionnel" des boucles).
Si tu veux des lignes de 4 rubriques, il suffit de remplace {0,3} par {0,4} et {1/3} par {1/4}.
Amicalement,
ARNO*
--
Le Scarabée : http://www.scarabee.com
uZine 2 : http://www.uzine.net
DH/DSS, 0x11930F0B, DEEB 602D B344 644B AF88 BF73 85F4 2297 1193 0F0B