Deux avant l’article et deux après alphabétiquement

Voici une combinaison de boucles pour afficher dans l’ordre alphabétique deux articles avant et deux articles après l’article courant.

But

Imaginons que le site contienne les articles de titre :

titre id
a 10
b 3
c 4
m 11
z 6
g 19

et qu’on veuille afficher 5 articles dans l’ordre avec l’article courant au milieu. Par exemple, si l’article courant est « c » :

  • a
  • b
  • c
  • m
  • z

En une boucle ?

On pourrait faire une seule boucle pour afficher 5 articles consécutivement, classés par titre :

<B_article>
<ul>
<BOUCLE_article(ARTICLES){par titre} {0,5}>
<li>#TITRE</li>
</BOUCLE_article>
</ul>
</B_article>

Le problème, c’est qu’il n’y a aucun moyen de dire à SPIP qu’on veut l’article courant au milieu de cette liste. De plus, on ne peut pas jouer avec les IDs pour faire ce genre de sélection, parce qu’il n’y a aucune garantie que les articles soient créés dans l’ordre alphabétique.

Les articles avant et après

On peut en fait trouver tous les articles avant et après l’article courant avec la combinaison de boucles suivante :

<B_article_courant>
<ul>
<BOUCLE_article_courant(ARTICLES){id_article}>
    <BOUCLE_avant(ARTICLES){titre <= #_article_courant:TITRE}{exclus}{id_rubrique}{par titre}{inverse}>
<li>#TITRE</li>
    </BOUCLE_avant>

<li><em>#TITRE</em></li>    

    <BOUCLE_apres(ARTICLES){par titre}{titre>#_article_courant:TITRE}{id_rubrique}>
       <li>#TITRE</li>
    </BOUCLE_apres>

</BOUCLE_article_courant>
</ul>
</B_article_courant>

Le problème, c’est que si on limite la première boucle à deux articles avec le critère {0,2}, SPIP va trier par titre inverse, puis limiter à deux articles. On aura donc les deux articles qui nous intéressent, mais triés dans le mauvais ordre. Dans notre exemple :

  • b
  • a
  • c
  • m
  • z

Jouer du doublons

Ce qu’il nous reste à faire, c’est de jouer du critère doublons pour faire la chose suivante :
-  trouver les 2 articles avant : BOUCLE_trouve_avant,
-  exclure tous les autres articles : BOUCLE_exclus,
-  afficher les articles qu’on voulait garder dans le bon ordre : BOUCLE_affiche_avant.

<B_article_courant>
<ul>
<BOUCLE_article_courant(ARTICLES){id_article}>    
    <BOUCLE_trouve_avant(ARTICLES){doublons
avant}{0,2}{titre <= #_article_courant:TITRE} {exclus} {id_rubrique}{par titre}{inverse}>
    </BOUCLE_trouve_avant>
       
    <BOUCLE_exclus(ARTICLES){doublons
avant} {doublons exclus}>
</BOUCLE_exclus>

    <BOUCLE_affiche_avant(ARTICLES){doublons exclus}{par titre}>
       <li>#TITRE</li>
    </BOUCLE_affiche_avant>
    
<li><em>#TITRE</em></li>
    

    <BOUCLE_apres(ARTICLES){par titre}{titre>#_article_courant:TITRE}{0,2}{id_rubrique}>
       <li>#TITRE</li>
    </BOUCLE_apres>

</BOUCLE_article_courant>
</ul>
</B_article_courant>
Remarques :
  1. en utilisant les critères {titre <= #_article_courant:TITRE} {exclus}, on s’assure que les articles ayant le même titre que l’article courant soient placé avant celui-ci,
  2. cette boucle n’est pertinente que si l’on veut trier plus d’un article avant et après par ordre alphabétique. Si vous voulez faire des choses plus simple, voir « Article Précédent / Article Suivant ».

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

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 champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom