Contactez-nous

1

Un article au hasard parmi les 5 derniers

2 décembre 2007
par ARNO*

[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.

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>

Télécharger

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é).

  • rpapa
    Décembre 2007

    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+

  • Gaby
    Mars 2008

    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

    @+

  • Chris
    Juillet 2008

    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.

  • ARNO*
    Juillet 2008

    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.

Qui êtes-vous ?
Votre message

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.