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}