{tri} et #TRI dans les boucles

SPIP dispose d’un critère et d’une balise qui permettent de faire facilement des listes triables.

  • Apparu en : SPIP 3.0

Le critère {tri} simplifie la réalisation de listes triables de la même façon que le critère {pagination} simplifie la réalisation de listes paginées.

Dans une boucle simple, il permet de définir le critère de tri en lui indiquant en argument le champ à utiliser par défaut :

<BOUCLE_art(ARTICLES){tri titre}>
</BOUCLE_art>

Jusque là rien de nouveau par rapport au critère {par}. Mais {tri} peut être associé à la balise #TRI qui permet de générer un lien pour changer le critère de tri. La balise #TRI prend en premier argument le champ de tri, et en second argument le libellé du lien cliquable pour utiliser ce champ pour le tri :

<B_art>
<p>#TRI{titre,'Trier par titre'} | #TRI{date,'Trier par date'} | 
#TRI{date_redac,'Trier par date de rédaction'}</p>
<BOUCLE_art(ARTICLES){tri titre}>
</BOUCLE_art>

Ce faisant l’internaute se voit proposer un menu pour modifier le tri de la boucle. Le tri actuellement utilisé est exposé en gras. Un clic active les tris non utilisés. Depuis SPIP 4.2, un clic inverse un tri actif.

Si la boucle est dans une inclusion ajax, il suffit de renseigner la classe ajax en troisième argument de la balise #TRI pour que les liens se comportent avec un rechargement partiel de la page :

<B_art>
<p>#TRI{titre,'Trier par titre',ajax} | #TRI{date,'Trier par date',ajax} | 
#TRI{date_redac,'Trier par date de rédaction',ajax}</p>
<BOUCLE_art(ARTICLES){tri titre}>
</BOUCLE_art>

Le critère {tri} permet également d’indiquer le sens du tri par défaut en second argument. Il faut indiquer la valeur direct ou 1 pour indiquer un tri croissant par défaut, et inverse ou -1 pour un tri décroissant par défaut :

<B_art>
<p>#TRI{titre,'Trier par titre'} | #TRI{date,'Trier par date'} | 
#TRI{date_redac,'Trier par date de rédaction'}</p>
<BOUCLE_art(ARTICLES){tri date,-1}>
</BOUCLE_art>

Par ailleurs il est aussi possible de proposer le choix du sens de tri. Cela se fait en passant > pour un tri croissant et < pour un tri décroissant en premier argument de la balise #TRI :

<B_art>
<p>#TRI{>,'Tri croissant',ajax} | #TRI{<,'Tri décroissant',ajax} | #TRI{titre,'Trier par titre',ajax} | #TRI{date,'Trier par date',ajax} | 
#TRI{date_redac,'Trier par date de rédaction',ajax}</p>
<BOUCLE_art(ARTICLES){tri titre}>
</BOUCLE_art>

Cela dit, plutôt que de proposer des boutons de tri systématique, une alternative est possible : adapter automatiquement le sens du tri à la colonne utilisée pour le tri. Cela se fait en passant en second argument de la balise tri un tableau avec le sens par défaut pour chaque colonne :

#SET{defaut_tri,#ARRAY{
  titre,1,
  date,-1,
  date_redac,-1
}}
<B_art>
<p>#TRI{titre,'Trier par titre',ajax} | #TRI{date,'Trier par date',ajax} | 
#TRI{date_redac,'Trier par date de rédaction',ajax}</p>
<BOUCLE_art(ARTICLES){tri titre,#GET{defaut_tri}}>
</BOUCLE_art>

Ainsi quand l’internaute choisira le tri par titre, celui-ci sera dans un ordre croissant. Mais quand il choisira la date ou la date de rédaction, le tri se fera dans un ordre décroissant.

Un troisième argument commençant par session permet d’indiquer de stocker l’ordre de tri dans la session de l’internaute. Celle-ci ou celui-ci pourra dès lors retrouver son tri favori lors de son retour sur la page.

#SET{defaut_tri,#ARRAY{
  titre,1,
  date,-1,
  date_redac,-1
}}
<B_art>
<p>#TRI{titre,'Trier par titre',ajax} | #TRI{date,'Trier par date',ajax} | 
#TRI{date_redac,'Trier par date de rédaction',ajax}</p>
<BOUCLE_art(ARTICLES){tri titre,#GET{defaut_tri}, session_art}>
</BOUCLE_art>

Multilinguisme

La balise tri peut trier selon un champ même lorsque celui ci contient des chaînes multilingues (exemple : <multi>[fr]Irak [en]Iraq</multi>).

Il suffit pour cela de préfixer le nom du champ par ’multi’ dans l’appel de la balise #TRI.

Exemple : #TRI{multi titre,'Titre', ajax}

Auteur cerdic Publié le : Mis à jour : 23/07/23

Traductions : English, français, Nederlands