{par ...}

Le critère {par ...} spécifie un ordre de présentation des résultats d’une boucle.

Le critère {par ...} spécifie un ordre de présentation des résultats d’une boucle. Par exemple, on pourra ordonner les articles {par date}, {par date_redac} ou encore {par titre}

Ordonner par numéro

Il est possible d’ordonner l’affichage des éléments en fonction du préfixe numérique d’un de leurs champs (titre, sur-titre, ps…) [1]. Pour cela, le critère s’écrit : {par num champ}.
Par exemple pour ordonner suivant le préfixe numérique associé au titre, {par num titre} affichera les éléments dans l’ordre croissant des préfixes numériques de leur titre, en commençant (s’il y en a) par les titres non préfixés (qui, eux, ne seront pas ordonnés).

À noter :

-  le critère {par num ...} prend aussi en compte toutes les valeurs du champ commençant par un chiffre ; ainsi {par num surtitre} tiendra compte du surtitre « 14 juillet 1789 » et le placera entre « 10. surtitre quelconque » et « 20. Autre surtitre ».

-  pour les préfixes commençant par des 0 (zéro), l’ordre rendu par {par num titre} sera du préfixe comportant le plus grand nombre de zéros vers le préfixe en comportant le moins : 00000. Titre…, 0000. Titre…, 000. Titre…, 0. Titre…. Ils s’afficheront après les articles contenant des numéros supérieurs à zéro.

Ordonner par langue et ordre alphabétique

Dans le cadre d’un site multilingue le critère {par multi ...} permet de trier par ordre alphabétique dans chaque langue séparément ; par exemple : {par multi titre}. Sans l’ajout de multi la boucle renverrait le tri par ordre alphabétique toutes langues mélangées.

Ordonner selon plusieurs champs

Il est possible d’ordonner les éléments selon plusieurs champs. En écrivant {par champ1, champ2} on indique les ordres de tri consécutifs : les résultats sont d’abord triés selon le champ1, puis selon le champ2 pour les champs1 identiques. Il est possible de spécifier autant de champs que nécessaire.
Par exemple : {par date, titre} affichera les résultats triés par date (de la plus ancienne à la plus récente), puis les résultats ayant la même date seront triés par titre (dans l’ordre alphabétique).

Il est possible de spécifier plusieurs critères {par ...} pour une boucle.
Par exemple : {par date} {par titre} est équivalent à l’exemple précédent {par date, titre}.

Attention :
Quand on utilise plusieurs critères de tri, le critère {inverse} ne s’applique qu’au critère de tri placé juste avant. Ainsi {par date} {par titre} {inverse} n’appliquera le tri inversé que sur le champ titre (de Z à A), la date conservant son tri par défaut (de la plus ancienne à la plus récente).

C’est pourquoi on a introduit la notation {!par ...} qui inverse un critère de tri en particulier. Par exemple : {!par date} {par num titre} ordonne les résultats par date décroissante (de la plus récente à la plus ancienne) puis par numéro croissant pour les titres ayant la même date.
Cependant : {!par date, num titre} ordonne les résultats par date décroissante (de la plus récente à la plus ancienne) puis par numéro décroissant pour les titres ayant la même date ; cette écriture est donc équivalente à {!par date} {!par num titre} mais est différente de {par date, num titre} {inverse} (où {inverse} ne s’applique que sur num titre).
Attention donc à bien choisir votre écriture des critères en fonction des résultats que vous attendez.

Ordonner dynamiquement

Le critère {par ...} accepte aussi des noms de champs SQL spécifiés dynamiquement, notamment par la balise #ENV. Par exemple : {par #ENV{variable}} ordonnera sur la valeur de « variable » passée en url &variable=titre à condition que cette valeur soit un champ SQL de la table concernée par la boucle.

Ainsi &variable=num titre ne fonctionnera pas puisque aucun champ SQL ne se nomme num titre. Dans ce cas, on préférera utiliser le critère {tri}.

Ordre aléatoire

Il est possible d’obtenir une liste présentée dans un ordre aléatoire en utilisant le critère {par hasard}.

Ordonner les éléments d’une recherche par pertinence

Afin de classer les résultats d’un formulaire de recherche par pertinence, on utilisera le critère {par points} {inverse} ; un simple {par points} ordonnant les résultats de la plus petite à la plus grande pertinence.

Historique

SPIP 4.0

À partir de SPIP  4.0, le critère {par num xxx} intègre automatiquement le critère {par sinum xxx} avant lui. Ainsi dans (ARTICLES){par num titre}, les articles sans numéros (ou avec le numéro 0) passent après les articles ayant un numéro.

C’est à dire qu’il se comporte comme l’écriture {par sinum xxx, num xxx} utilisable en SPIP 3.2.

Par conséquent aussi, les titres contenant 0. Titre ou 000. Titre (entièrement des zéros) s’affichent maintenant après les titres avec des numéros.

SPIP 3.2

À partir de SPIP 3.2 le critère {par sinum xxx} permet de placer les articles avec numéros avant ceux n’en ayant pas. {par sinum xxx, num xxx} permet donc de trier par numéro, en plaçant les articles sans numéros après ceux qui en ont (contrairement à {par num xxx} seulement).

Pour avoir les éléments numérotés avant ceux sans numéros, il faut utiliser le critère {par sinum nom_champ}. Ce critère place les éléments numérotés avant les non-numérotés, mais il ne trie pas les éléments à l’intérieur de ces 2 groupes. Il doit donc être utilisé en conjonction avec un autre critère de tri.

Exemple : {par sinum titre, num titre, titre} mettra les éléments sans numéro en fin de liste, puis triera à l’intérieur de ces 2 groupes par num titre et titre.

Voir aussi le critère {inverse}

Notes

[1Le format du préfixe numérique est :
un nombre de n chiffres, suivi d’un point ou d’une parenthèse fermante, suivie d’un espace.

Exemples :
015.Un titre
51)Un autre titre

Auteur denisb Publié le : Mis à jour : 21/07/23

Traductions : English, français, Nederlands