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}