{collecte}

El criteri {collecte} permet especificar la comparació (la «collation») per la petició generada per un bucle (crida de la clàusula «COLLATE» de MySQL [1]).

El criteri {collecte}, (a partir d’SPIP 2.0), permet forçar la petició sql, generada pel bucle a la que s’ha passat. Utilitzeu una fusió específica per la clàusula «ORDER BY» (criteri {par ...}).

Exemple

Suposem una base en utf-8 amb les seves taules en utf8 (DEFAULT CHARSET = utf8)

en aquesta joc de caràcters (CHARACTER_SET_NAME) és possible utilitzar 21 collations (comparacions) diferents [2] :

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 d’aquí, imaginem que a la taula «spip_articles» d’aquesta base, taula per defecte en comparació utf8_general_ci, hi ha els articles titulats:

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

El bucle:

<BOUCLE_a(ARTICLES) {par titre} {"<br />"}>
  #TITRE
</BOUCLE_a>

retornarà aquests articles en l’ordre alfabètic corresponent a la comparació per defecte de la taula:

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

El bucle:

#SET{collation, utf8_spanish_ci}
<BOUCLE_a(ARTICLES) {par titre} {collecte #GET{collation}} {"<br />"}>
  #TITRE
</BOUCLE_a>

retornarà aquests articles en l’ordre alfabètic corresponent a la comparació demanada:

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

D’aquesta manera les ñ (n amb ratlla) es classificaran desprès de les n (n soles).
En efecte, això correspon a l’ordre alfabètic castellà:

Llavors, la petició MySQL presentada és:

  SELECT articles.titre, articles.lang
      FROM spip_articles AS <span class="base64" title="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+YXJ0aWNsZXM8L2NvZGU+"></span>
    WHERE articles.statut = 'publie'
        AND articles.date < '9999-12-31'
ORDER BY articles.titre COLLATE utf8_spanish2_ci

Límit

No és possible fer funcionar el criteri {collecte} assignant-li «directement» el seu valor en la llista d’arguments de bucle: els {collecte utf8_spanish_ci}, {collecte 'utf8_spanish_ci'}, {collecte{utf8_spanish_ci}}... no funcionaran i mostraran un error php.
Només és possible utilitzar-lo per #GET{} desprès d’haver-lo declarat prèviament a #SET{}

Notes

[1Vegeu la documentació oficial per la clàusula «COLLATE» de Mysql: http://dev.mysql.com/doc/refman/5.0... i : Un exemple de l’efecte de comparació

[2En el joc de caràcters latin1, 8 comparacions són accessibles:

| 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 merce Publié le : Mis à jour : 26/10/12

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