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:
NananinaNinaNiñaÑiñañinaÑinaNonoNunu
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:
NananinaÑinaNinaNiñaÑiñañinaNonoNunu
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:
NananinaNinaNiñaNonoNunuÑ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à:
- «La ñ és la quinzena lletra entre la N i la O, en ordre alfabètic, de l’alfabet llatí en la seva versió castellana.» http://fr.wikipedia.org/wiki/%C3%91
Llavors, la petició MySQL presentada és:
SELECT articles.titre, articles.lang
FROM spip_articles AS <span class="base64" title="PGNvZGUgY2xhc3M9J3NwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lJyBkaXI9J2x0cic+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{}