Tri alphabétique simple

, par Matthieu Marcillaud

Comment faire rapidement un tri alphabétique sous SPIP ?

Prenons le fond titi.html

La pagination

Intégrons une première boucle qui va faire la pagination, seulement des premières lettres présentes dans les titres des articles, les affiche, et met un lien vers la page titi avec la lettre demandée :

  1. <B_alpha>
  2. <p class="pagination">
  3. <BOUCLE_alpha(ARTICLES) {par titre} {fusion LEFT(titre,1)}>
  4. <a href='[(#URL_PAGE{titi}|parametre_url{lettre, [(#TITRE|substr{0,1})]})]'>
  5. [(#TITRE|substr{0,1})]
  6. </a>
  7. </BOUCLE_alpha>
  8. </p>
  9. </B_alpha>

Télécharger

Le critère fusion
Ce critère permet d’effectuer un group by, c’est à dire un groupement des résultats identiques selon un critère. Ici, on groupe par la première lettre du titre avec LEFT(titre,1). On aurait pu, si les titres ont des espaces, mettre un LTRIM pour les enlever : LEFT(LTRIM(titre),1)

L’affichage

On peut dans la même page afficher les articles :

  1. <B_lettre>
  2. <ul>
  3. <BOUCLE_lettre(ARTICLES) {par titre} {titre==^(#ENV{lettre,A})}>
  4. <li>#TITRE</li>
  5. </BOUCLE_lettre>
  6. </ul>
  7. </B_lettre>

Télécharger

L’opérateur == permet de sélectionner selon une expression régulière, ici suivant le debut du titre. ^Z cherchera tous les articles commençant par Z. Pour ne pas prendre en compte les premiers espaces des titres, une syntaxe doit pouvoir être appliquée, comme ^\s*Z qui indique qu’il peut y avoir 0 à n espace avant la lettre Z. On pourrait dont écrire le critère ainsi : {titre==^\s*(#ENV{lettre,A})}

Inclure cette page

En modifiant l’url, par exemple en remplaçant dans titi.html #URL_PAGE{titi} par #SELF, il devient possible d’appeler le squelette depuis un autre.

  1. <INCLURE{fond=titi}{lettre}{ajax} />

En modèle

Il n’est par contre pas possible de mettre cette structure dans un modèle. Pour explication, si nous avons un modèle modeles/titi.html et que nous l’appelons dans un article par <titi|lettre=P>, il va bien choisir les lettres commençant par P. Cependant, les liens de pagination ne seront pas valides car un modèle ne peut pas récupérer d’autres variables d’environnement que ce qu’on lui donne. En particulier, il ne pourra pas obtenir les &lettre=X présents dans l’url ainsi formée et affichera ainsi toujours la lettre P.

P.-S.

Avertissements

  • Ce tri va se faire en totale dépendance avec le système de gestion de base de donnée (mysql ou autre), en particulier, si le charset est UTF8 ou non, sensible à la casse ou non. D’autres méthodes gèrent a priori mieux ces petites différences : Voir : Tris alphabétiques de SPIP contrib
  • Ce tri n’enlève pas les numéros éventuels devant les titres des articles, ni ne prend pas en compte les balises <multi> de SPIP.

Coup de pouce

Pour me maintenir en éveil et en pleine forme physique et mentale, vous pouvez me faire le cadeau d'un jus de fruit pressé.

En plus de m'hydrater, de m'offrir une alimentation saine crudivore et frugivore, cela peut aussi me motiver à produire d'autres documentations ou peut-être à prendre des vacances ! :)

Vous pouvez également me « Flattrer » si vous utilisez le service en ligne très malin Flattr de microdonations qui permet d'allouer un budget mensuel à des créateurs de contenu. Votre budget est partagé chaque mois entre toutes les personnes que vous avez flattées ce mois là.