O critério {tri} simplifica a criação de listas ordenadas da mesma maneira que o critério {pagination} simplifica a realização de listas paginadas.
Num loop simples, permite definir o critério de ordenação indicando como argumento o campo asuar por padrão:
<BOUCLE_materia(ARTICLES){tri titre}>
</BOUCLE_materia>
Até aqui, nada de novo, em relação ao critério {par}. Mas {tri} pode ser associado à tag #TRI permitindo gerar um link para alterar o critério de ordenação. A tag #TRI recebe como primeiro argumento o campo de ordenação, e como segundo o título do link clicável para usar esse campo para a ordenação:
<B_materia>
<p>#TRI{titre,'Ordenar pelo título'} | #TRI{date,'Ordenar pela data'} | 
#TRI{date_redac,'Ordenar pela data de redação'}</p>
<BOUCLE_materia(ARTICLES){tri titre}>
</BOUCLE_materia>
Ao clicar no link, é exibido um menu que permite alterar a ordenação do loop. A ordenação corrente é mostrada em negrito. Um cli ativa as ordenações não usadas. Após o SPIP 4.2, um clique inverte uma ordenação ativa.
Se o loop estiver numa inclusão ajax, basta inserir a classe ajax como terceiro argumento da tag #TRI para que os links se comportem com um recarregamento parcial da página:
<B_materia>
<p>#TRI{titre,'Ordenar pelo título',ajax} | #TRI{date,'Ordenar pela data',ajax} | 
#TRI{date_redac,'Ordenar pela data de redação',ajax}</p>
<BOUCLE_materia(ARTICLES){tri titre}>
</BOUCLE_materia>
O critério {tri} permite igualmente indicar o sentido padrão da ordenação como segundo argumento. É preciso indicar o valor direct ou 1 para indicar uma ordenação crescente, por padrão, e inverse ou -1 para uma ordenação decrescente, por padrão:
<B_materia>
<p>#TRI{titre,'Ordenar pelo título'} | #TRI{date,'Ordenar pela data'} | 
#TRI{date_redac,'Ordenar pela data de redação'}</p>
<BOUCLE_materia(ARTICLES){tri date,-1}>
</BOUCLE_materia>
Além disso, é também possível a escolha do sentido da ordenação. Isto faz-se passando > para uma ordenação crescente e < para uma ordenação decrescente como primeiro argumento da tag #TRI:
<B_materia>
<p>#TRI{>,'Ordenação crescente',ajax} | #TRI{<,'Ordenação decrescente',ajax} | #TRI{titre,'Ordenar pelo título',ajax} | #TRI{date,'Ordenar pela data',ajax} | 
#TRI{date_redac,'Ordenar pela data de redação',ajax}</p>
<BOUCLE_materia(ARTICLES){tri titre}>
</BOUCLE_materia>
Isto dito, mais do que oferecer botões de ordenação sistemática, uma alternativa é possível: adaptar automaticamente o sentido da ordenação à coluna usada pela ordenação. Isto faz-se passando como segundo argumento da tag #TRI uma matriz com o sentido por padrão para cada coluna:
#SET{defaut_tri,#ARRAY{
  titre,1,
  date,-1,
  date_redac,-1
}}
<B_materia>
<p>#TRI{titre,'Ordenar pelo título',ajax} | #TRI{date,'Ordenar pela data',ajax} | 
#TRI{date_redac,'Ordenar pela data de redação',ajax}</p>
<BOUCLE_materia(ARTICLES){tri titre,#GET{defaut_tri}}>
</BOUCLE_materia>
Assim, quando o visitante escolher a ordenação pelo título, esta será por ordem crescente. Mas quando escolher pela data ou pela data de redação, a ordenação será em ordem decrescente.
Um terceiro argumento começando por session permite armazenar a ordenação na seção do visitante. Ele poderá, ao retornar à página, já encontrar a sua ordenação preferida.
#SET{defaut_tri,#ARRAY{
  titre,1,
  date,-1,
  date_redac,-1
}}
<B_materia>
<p>#TRI{titre,'Ordenar pelo título',ajax} | #TRI{date,'Ordenar pela data',ajax} | 
#TRI{date_redac,'Ordenar pela data de redação',ajax}</p>
<BOUCLE_materia(ARTICLES){tri titre,#GET{defaut_tri}, session_materia}>
</BOUCLE_materia>
Multilinguísmo
A tag #TRI pode ordenar por um campo, mesmo que este contenha strings multilíngues (exemplo: <multi>[pt]Iraque [en]Iraq</multi>).
Para isso, basta prefixar o nome do campo por ’multi’ na chamada da tag #TRI.
Exemplo: #TRI{multi titre,'Título', ajax}