Trier des éléments numérotés par ordre alphabétique

mardi 13 mai 2008

SPIP / astuce / critères / trie

Le problème

Comment afficher une liste d’éléments ayant un numéro d’ordre comme préfixe de leur titre (du genre "1. titre rubrique 1", "2. titre rubrique 2"...) triés par ordre alphabétique SANS tenir compte du numéro ?

Le code

<ul>
<BOUCLE_t(RUBRIQUES){tout} {par SUBSTRING_INDEX(titre,".",-1)}>
  <li>#TITRE</li>
</BOUCLE_t>
</ul>

L’explication

La syntaxe du critère {par SUBSTRING_INDEX(titre,".",-1)} est une fonction MySQL dont voici la description :

SUBSTRING_INDEX(str,delim,count)

Retourne une portion de la chaîne de caractères str, située avant count occurrences du délimiteur delim. Si l’argument count est positif, tout ce qui précède le délimiteur final sera retourné. Si l’argument count est négatif, tout ce qui suit le délimiteur final sera retourné.

Cela nous permet de classer les rubriques de notre boucle "par" leur titre auquel on "retire" tout ce qui précède le délimiteur (dans notre cas un point).

De la même manière, on peut utiliser tout type de fonction MySQL de chaîne de caractères pour trier les éléments d’une boucle en insérant la fonction dans le critère {par ...}.

Merci cy_altern et azerttyu

Vos commentaires

  • Gogomagella

    Bonjour,
    Je cherche à savoir comment faire en sorte que la liste des articles sous une rubrique s’affiche par ordre chronologique décroissant. Pour l’instant tous les articles sous la rubrique apparaissent par ordre alphabétique de sorte que les visiteurs ne voient pas les derniers articles.

    Merci de votre aide.

    4 octobre 2009, 20:49

  • bb

    Bonsoir,

    Si ta question porte bien sur le classement des articles dans l’espace privé de SPIP, je viens de publier une astuce à ce sujet.

    Modifier l’ordre d’affichage des articles dans l’espace privé de SPIP

    ++

    4 octobre 2009, 23:12

  • Gogomagella

    Bonjour,

    Le classement dans l’espace privé est tout à fait correcte et me convient parfaitement : les derniers articles publiés sont classés par ordre chronologique décroissant.

    Ce qui me désole c’est l’affichage par ordre alphabétique des articles à la publication sous une rubrique. Cela rend difficile la lecture de la page puisque le lecteur doit chercher l’information la plus récente, ce qui n’est pas toujours évident.

    Voici une page exemple : http://www.sprim-fo.org/spip.php?rubrique28

    Ici la ligne 3 commençant par la letrre G devrait se trouver sur la première ligne des derniers articles publiés, ainsi que cela se fait sur la page d’accueil (qui fonctionne très bien) .http://www.sprim-fo.org/

    Merci de votre aide précieuse.

    13 janvier 2010, 10:38

  • bb

    Salut,

    Ce qui me désole c’est l’affichage par ordre alphabétique des articles à la publication sous une rubrique.

    Pour cela il te faut modifier ton squelette rubrique.html pour remplacer le critère {par titre} par {!par date} dans la boucle qui affiche les articles...

    ++

    13 janvier 2010, 13:37

  • Sylvain

    bonjour,
    lorsqu’il y a d’autres points dans les titres, le tri reste surprenant...
    une autre idée ?
    merci

    31 octobre 2012, 07:37

  • denisb

    indépendament du fait que ça ne fonctionne pas s’il y a un point (.) dans le titre autre que celui qui sert au préfixe numéroté, ça ne fonctionne pas non plus pour les préfixes numérotés de spip qui sont : chiffre, chiffre,.., point, espace

    à cause de l’espace, les titres qui ont un préfixe numéroté seront rangés par mysql avant ceux n’en ayant pas. puisque du coup mysql trie sur : espace-titre (en premier) puis les autres titres (ceux sans espace)...

    pour trier par ordre alpha sans tenir compte des préfixex numérotés, voir le n° 26 (Un critère de tri alphabétique qui ne prend pas en compte les num titre) sur la page http://contrib.spip.net/Astuces-longues-pour-SPIP

    14 novembre 2013, 15:18

  • b_b

    Pour info, voici une autre possibilité d’utilisation des fonctions MySQL dans un critère de boucle :

    Sélectionner des article selon la longueur du contenu d’un champ

    http://forum.spip.net/fr_258600.html#forum258636

    4 septembre 2014, 14:07

Répondre à cet article

Qui êtes-vous ?
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.