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 :

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 :

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.

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.