{fusion campo_sql}

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

Autor Ricardo Porto Publié le :

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