{tri} e #TRI nos loops

O SPIP possui um critério e uma tag que permitem criar facilmente listas ordenadas.

  • Apparu en : SPIP 3.0

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}

Autor Ricardo Porto Publié le : Mis à jour : 09/04/25

Traductions : English, français, Nederlands, Português