{collecte}

O critério {collecte} (collation) permite especificar a intercalação (a "collation") da consulta gerada por um loop (chamada da cláusula «COLLATE» do MySQL.

  • Apparu en : SPIP 2.0

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:

Nana
nina
Nina
Niña
Ñiña
ñina
Ñina
Nono
Nunu

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:

Nana
nina
Ñina
Nina
Niña
Ñiña
ñina
Nono
Nunu

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:

Nana
nina
Nina
Niña
Nono
Nunu
Ñ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:

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{}.

Notas

[1No conjunto de caracteres latin1, oito collations estão acessíveis:

| COLLATION_NAME | CHARACTER_SET_NAME |
| latin1_bin | latin1 |
| latin1_danish_ci | latin1 |
| latin1_general_ci | latin1 |
| latin1_general_cs | latin1 |
| latin1_german1_ci | latin1 |
| latin1_german2_ci | latin1 |
| latin1_spanish_ci | latin1 |
| latin1_swedish_ci | latin1 |

Autor Ricardo Porto Publié le :

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