UN ARTICLE AU HASARD PARMI LES 5 DERNIERS
UN ARTICLE AU HASARD PARMI LES 5 DERNIERS
Techniques SPIP

Vous trouverez ici des trucs et astuces destinés aux développeurs de sites sous SPIP.

La majorité de ces trucs est consacrée aux filtres graphiques introduits dans SPIP 1.9. Il y a là en effet un vaste champ d’expérimentation pour les webmestres et les graphistes.

Chaque truc est suivi d’un forum auquel nous vous invitons à participer.

N.B. La présence de ces trucs et astuces sur notre site professionnel est destinée à faire connaître notre activité de création de sites sous SPIP. Vous pouvez librement utiliser les morceaux de code fournis ici dans vos propres squelettes. Vous pouvez reprendre ces exemples sur votre site ou dans les forums d’un autre site ; dans ce cas, nous vous demandons simplement d’avoir la courtoisie de référencer la page d’où est tiré le code repris.

XML

[SPIP 1.9.1] Voici une technique que j’ai développée pour notre site Flip-Zone ; dans les pages rubriques, je ne souhaitais pas afficher systématiquement, en grand, le dernier article publié, mais un article pris au hasard parmi les cinq derniers articles publiés.

#SET et #GET

Pour cela, j’utilise les balises #SET et #GET introduites dans SPIP 1.9.1.

La balise #SET{variable,valeur} et son pendant #GET{variable} ont été introduites par SPIP 1.9.1. La balise #SET{xxx,yyy} affecte une valeur yyy à une variable xxx propre au squelette calculé. Cette valeur peut être récupérée par la balise #GET{xxx}. Les variables créées ainsi ne sont pas transmises au squelette inclus.

Dans mon code, on trouvera :

  1. [(#SET{date_min,#DATE})]

Cette balise permet de stocker la valeur de la #DATE dans une variable nommée date_min. Dans la boucle suivante, j’utilise le code :

  1. #GET{date_min}

qui permet de récupérer la valeur de date_min.

Les boucles

Voici le code qui permet de récupérer un article pris au hasard parmi les cinq derniers publiés, dans une branche spécifique :

  1. <BOUCLE_5e(ARTICLES){branche}{par date}{inverse}{5,1}>
  2.      [(#SET{date_min,#DATE})]
  3. </BOUCLE_5e>
  4.  
  5. <BOUCLE_couverture_une(ARTICLES){branche}{date>=#GET{date_min}}{par hasard}{0,1}>
  6.       #ID_ARTICLE - #TITRE
  7. </BOUCLE_couverture_une>

La première boucle (BOUCLE_5e) permet de récupérer le cinquième article publié dans cette branche (ce code s’appliquant dans n’importe quelle rubrique du site, j’utilise le critère branche, qui prend tous les articles d’une rubrique et de ses sous-rubriques).

Je stocke la date de publication de cet article avec la balise #SET.

C’est dans la seconde boucle que se situe l’astuce : je sélectionne un article, pris au hasard, dans cette « branche », dont la date de publication est supérieure ou égale à la date de publication récupérée dans la boucle précédente.

Notes

- C’est typiquement le genre de boucle que j’aime dans SPIP : pas de bidouille compliquée, pas de grosse manipulation en PHP, code simple et lisible... et un peu de jus de cerveau pour trouver une jolie solution à un cas pratique.

- Que se passe-t-ils s’il n’y a pas cinq articles dans la branche ? Cela fonctionne tout de même : la première boucle ne contient aucun résultat (puisqu’il n’y a pas de « cinquième article »), et donc on ne stocke pas de valeur date_min. Dans la seconde boucle, le critère {date>=#GET{date_min}} revient donc à demander un article dont la date de publication est... supérieure à zéro (ce qui est le cas, justement, de tout article publié).

Décembre 2007
Un article au hasard parmi les 5 derniers
rpapa (robert.papanicola chez apinc.org)

Salut Arnaud

pourquoi ne pas utilser les doublons pour faire cette boucle

     <BOUCLE_5e(ARTICLES){branche}{par date}{inverse}{5,1}{doublons}>      </BOUCLE_5e>      <BOUCLE_couverture_une(ARTICLES){branche}{date>=#GET{date_min}}{par hasard}{0,1}{!doublons}>            #ID_ARTICLE - #TITRE      </BOUCLE_couverture_une>

ou alors je n’ai pas tout compris

A+

Mars 2008
Un article au hasard parmi les 5 derniers
Gaby (gabrieltavernier chez gmail.com)

Cette méthode permet-elle d’avoir un article différent à chaque actualisation de la page (sans la recalculer), car si c’est le cas ça pourrait m’être très utile.

Merci

@+

Juillet 2008
Un article au hasard parmi les 5 derniers
Chris

Selon le principe de la première réponse à cet article, cela donnerait :

<BOUCLE_5e(ARTICLES){branche}{par date}{inverse}{0,5}{doublons}></BOUCLE_5e><BOUCLE_couverture_une(ARTICLES){branche}{par hasard}{0,1}{!doublons}>           #ID_ARTICLE - #TITRE</BOUCLE_couverture_une>

La première boucle récupère les 5 derniers articles par date, et la seconde en choisi un au hasard parmi les 5.

Juillet 2008
Un article au hasard parmi les 5 derniers
ARNO* (arno chez rezo.net)

Oui Chris, la méthode {!doublons} fonctionne parfaitement.

Quand j’ai écrit ce billet, je me méfiais de cette méthode, parce qu’elle ne me semblait pas documentée (donc pas forcément « officielle ») ; mais maintenant, je l’utilise très régulièrement.

Votre message :
Un message, un commentaire ?

(Pour créer des paragraphes, laissez simplement des lignes vides.)

Qui êtes-vous ? (optionnel)