Attraper les doc (des articles) d’une rubrique

23 avril 2009,
par Romy Têtue

Mots-clefs associés à cet article :

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.

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 !


Rubrique avec player vidéo sur le site de l'UPSTI

À savoir : cette solution n’est pas économe en ressource. On la réservera donc à ce type besoin, sans la généraliser.

Vos commentaires

Répondre à cet article

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici
  • Ce formulaire accepte les raccourcis SPIP [->url] {{gras}} {italique} <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Suivre les commentaires : RSS 2.0 | Atom