O critério fusion
permite reagrupar os resultados de um loop SPIP pelos valores distintod de um campo.
Se o loop sem o critério {fusion campo_sql}
retorna vários registos com o valor de champ_sql
repetido, então o loop com o critério {fusion campo_sql}
só apresentará um de cada.
Para isso, a consulta SQL gerada integra uma instrução GROUP BY
.
Exemplo ’pedagogico’
O loop a seguir exibirá os títulos de todas as matérias do site:
<BOUCLE_tudo(ARTICLES)>
#TITRE
</BOUCLE_tudo>
O loop a seguir, com um critério fusion
sobre a seção, partirá igualmente de todas as matérias, mas as agrupará por id_rubrique idêntico, e só apresentará ao final uma única matéria por seção.
<BOUCLE_extrai(ARTICLES){fusion id_rubrique}>
#TITRE
</BOUCLE_extrai>
Exemplos ’aplicados’
O loop a seguir exibe as 10 mensagens de fórum mais recentes, ordenadas pela data, enviadas por um IP distinto:
<BOUCLE_comentario(FORUMS){plat}{par date}{inverse}{0,10}{fusion ip}>
<INCLURE{fond=inc/intro_comentario}{id_forum}>
</BOUCLE_comentario>
Pode-se igualmente usar expressões SQL como parâmetro do critério. O loop a seguir exibirá a lista de anos para os quais há ao menos uma matéria:
<BOUCLE_anos_com_materias(ARTICLES){par date}{inverse}{fusion YEAR(date)}>
[(#DATE|annee)]
</BOUCLE_anos_com_materias>
E aqui, como montar uma paginação por inicial do título das matérias:
<B_alpha><nav class="pagination"><ul>
<BOUCLE_alpha(ARTICLES) {par titre} {fusion LEFT(titre,1)}>
<li><a href='[(#SELF|parametre_url{lettre, [(#TITRE|substr{0,1})]})]'>[(#TITRE|substr{0,1})]</a></li>
</BOUCLE_alpha></ul></nav>
</B_alpha>
Uma contribuição mostra como usar este critério para listar as matérias por ano e, em seguida, por mês. Ver
Várias colunas
Pode-se agrupar os resultados por vários colunas, usando-se várias vezes o critério, por exemplo {fusion xx}{fusion yy}
, que produzirá, na consulta SQL, GROUP BY xx,yy
Atenção
Um critério de ordenação {par xxx}
combinado com o critério {fusion campo_sql}
não necessariamente produzirá os resultados esperados.
- <BOUCLE_a1(ARTICLES){tout}{par id_article}>
retorna as matérias ordenadas por id_article (do 1 ao 10000, por exemplo).
- <BOUCLE_a2(ARTICLES){par id_article}{fusion id_rubrique}>
retorna as matérias ordenadas por id_article após reagrupadas por id_rubrique, mas estes reagrupamentos são feitos aleatoriamente e, em princípio, sem ordenação particular!
Ver igualmente
- o critério {doublons}
- o filtro |unique