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

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

mardi 13 mai 2008, par b_b

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

Messages

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

  • 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

    ++

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

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

    ++

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

  • 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

  • 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

Un message, un commentaire ?

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.