Dans SPIP, j’écris des articles auxquels je joins des documents divers et variés, lesquels articles sont rangés dans des rubriques. J’ai régulièrement besoin de lister les documents des articles d’une rubrique donnée, que ce soit pour faire un album photo général ou une liste des PDF à télécharger. Et à chaque fois je me reprends les pieds dans le même tapis. Patatra ! Je note donc ici, pour mémoire, l’une des astuces pour ce faire.
Souhaitant lister les documents de la rubrique, je commence spontanément par écrire cette boucle simple :
<BOUCLE_documents(DOCUMENTS){id_rubrique}>#TITRE</BOUCLE_documents>
Et patatra ! Dans SPIP, les documents peuvent être associés aux rubriques. Cette boucle liste donc les documents de la rubrique, mais pas les documents des articles de la rubrique. La nuance est de taille et me cause bien du souci ce soir.
Il faut donc lister d’abord les articles de la rubrique, puis leurs documents, de cette façon :
<BOUCLE_articles(ARTICLES){id_rubrique}>
<BOUCLE_documents(DOCUMENTS){id_rubrique}>#TITRE</BOUCLE_documents>
</BOUCLE_articles>
Ça marche. Mais avec deux boucles ainsi imbriquées, il est difficile de ne prélever qu’un certain nombre de documents, de les classer (par date ou par titre, peu importe), ou encore d’utiliser la partie conditionnelle (de quelle boucle ??) pour afficher autre chose, si aucun document n’est trouvé, par exemple. Bref, cette imbrication de boucles ne convient que si le besoin est de lister TOUS les documents.
Or, ce soir, je veux attraper un seul document parmi tous ceux présents dans les articles de la rubriques et de ses sous-rubriques, en l’occurrence la dernière vidéo flash en date. Les critères SPIP exprimant cette phrase sont très simplement : {0,1} {branche} {!par date} {extension IN swf}
; mais ne peuvent s’employer ainsi, car ils ne concernent pas les mêmes BOUCLES
.
Mon idée est de commencer par lister les articles de la branche, pour les mémoriser (sans les afficher) ; puis de chercher la vidéo la plus récente associée à un article parmi ceux mémorisés, et l’afficher.
#SET{branche,#ARRAY}
<BOUCLE_branche(ARTICLES) {branche}>[(#SET{branche,[(#GET{branche}|push{#ID_ARTICLE})]})]</BOUCLE_branche>
<BOUCLE_video(DOCUMENTS) {id_article IN #GET{branche}} {extension IN swf} {!par date} {0,1}>#EMBED_DOCUMENT</BOUCLE_video>
Grosso modo :
- avec
#SET
, je mémorise les articles de la branche ; - son copain
#GET
me les restitue ; - mais entre temps, un truc qui permet de mémoriser plusieurs éléments les uns à la suite des autres : la balise
#ARRAY
, que je découvre ce soir, bien qu’elle ait été introduite en SPIP 1.9.2.
Voilà donc comment j’ai réussi à afficher, à l’accueil de chaque rubrique, une petite vidéo récente et toujours en rapport avec le sujet traité dans le coin, ou un visuel alternatif si aucune vidéo n’est présente. La boucle est bouclée !
À savoir : cette solution n’est pas économe en ressource. On la réservera donc à ce type besoin, sans la généraliser.
Vos commentaires
1. Le 30 novembre 2010 à 21:38, par Rene Giraud
En réponse à : Attraper les doc (des articles) d’une rubrique
Hey, jsui tombée au hasard sur ton site via une navigation au sein de google. J v ajouté ce weblog sur facebook !! :-) Tschuss... Paloma
2. Le 3 juillet 2016 à 22:34, par Pouet Pouet
En réponse à : Attraper les doc (des articles) d’une rubrique
Une autre boucle fait plus simple : Afficher des documents des articles d’une rubrique en une seule boucle
PS : Que fait la copie d’écran du site de l’upsti dans cet article ???
3. Le 12 septembre 2018 à 08:22, par Shema
En réponse à : Attraper les doc (des articles) d’une rubrique
Merci beaucoup pour ce petit tutoriel qui vient de me sauver la vie !! Coup de chapeau !
Répondre à cet article
Suivre les commentaires :
| 