O critério {collecte}, permite forçar a consulta SQL, gerada pelo loop ao qual foi passado, a usar uma intercalação específica para a cláusula "ORDER BY" (critério {par ..}).
Exemplo
Suponhamos uma base em UTF-8, com as suas tabelas em utf8 (DEFAULT CHARSET = utf8).
Nesse conjunto de caracteres (CHARACTER_SET_NAME) pode-se usar 21 collations (intercalações) diferentes [1] :
| COLLATION_NAME | CHARACTER_SET_NAME |
|---|---|
| utf8_bin | utf8 |
| utf8_czech_ci | utf8 |
| utf8_danish_ci | utf8 |
| utf8_esperanto_ci | utf8 |
| utf8_estonian_ci | utf8 |
| utf8_general_ci | utf8 |
| utf8_hungarian_ci | utf8 |
| utf8_icelandic_ci | utf8 |
| utf8_latvian_ci | utf8 |
| utf8_lithuanian_ci | utf8 |
| utf8_persian_ci | utf8 |
| utf8_polish_ci | utf8 |
| utf8_roman_ci | utf8 |
| utf8_romanian_ci | utf8 |
| utf8_slovak_ci | utf8 |
| utf8_slovenian_ci | utf8 |
| utf8_spanish2_ci | utf8 |
| utf8_spanish_ci | utf8 |
| utf8_swedish_ci | utf8 |
| utf8_turkish_ci | utf8 |
| utf8_unicode_ci | utf8 |
A partir daí, imaginemos que na tabela "spip_articles" dessa base, tabela por padrão com intercalação utf8_general_ci, se encontrem as matérias entituladas:
NananinaNinaNiñaÑiñañinaÑinaNonoNunu
O loop:
<BOUCLE_a(ARTICLES) {par titre} {"<br>"}>
#TITRE
</BOUCLE_a>
retornará estas matérias na ordem alfabética correspondente à intercalação padrão da tabela:
NananinaÑinaNinaNiñaÑiñañinaNonoNunu
O loop:
#SET{collation, utf8_spanish_ci}
<BOUCLE_a(ARTICLES) {par titre} {collecte #GET{collation}} {"<br>"}>
#TITRE
</BOUCLE_a>
retornará, por sua vez, as matérias na ordem alfabética correspondente à intercalação especificada:
NananinaNinaNiñaNonoNunuÑinañinaÑiña
Assim, os ñ (n til) serão ordenados após os n (n simples). Isto corresponde, com efeito, à ordem alfabética castelhana:
- "O ñ é a décima quinta letra da versão castelhana do alfabeto latino, entre n e o na ordem alfabética. "https://pt.wikipedia.org/wiki/Ñ
A consulta MySQL produzida é, assim:
SELECT articles.titre, articles.lang
FROM spip_articles AS `articles`
WHERE articles.statut = 'publie'
AND articles.date < '9999-12-31'
ORDER BY articles.titre COLLATE utf8_spanish2_ci
Limite
Não é possível fazer funcionar o critério {collecte} atribuindo-lhe "diretamente" o seu valor na lista dos argumentos do loop: os {collecte utf8_spanish_ci}, {collecte 'utf8_spanish_ci'}, {collecte{utf8_spanish_ci}}... não funcionarão e exibirão um erro PHP. Só é possível usá-lo com #GET{} após o ter declarado
previamente com #SET{}.