El criterio {collecte}
, (a partir de SPIP 2.0), permite forzar la consulta SQL generada por el bucle al cual se le pasa, para que utilice una regla de ordenación específica para la cláusula «ORDER BY» (criterio {par ...}
).
Ejemplo
Supongamos una base de datos en UTF-8 con sus tablas en UTF8 (DEFAULT CHARSET = utf8)
en este juego de caracteres (CHARACTER_SET_NAME) es posible utilizar 21 collations (reglas de ordenación) diferentes [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 de aquí, imaginemos que en la tabla «spip_articles» de esta base de datos, tabla con la regla de ordenación utf8_general_ci por defecto, se encuentran los artículos titulados:
NananinaNinaNiñaÑiñañinaÑinaNonoNunu
El bucle:
<BOUCLE_a(ARTICLES) {par titre} {"<br />"}>
#TITRE
</BOUCLE_a>
devolverá estos artículos en el orden alfabético correspondiente a la ordenación por defecto de la tabla:
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>
devolverá, en cambio, estos artículos en el orden alfabético correspondiente a la regla de ordenación especificada:
NananinaNinaNiñaNonoNunuÑinañinaÑiña
De este modo, las ñ serán colocadas después de las n.
Eso corresponde efectivamente al orden alfabético castellano.
La petición MySQL producida será:
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ímite
No es posible hacer funcionar el criterio {collecte}
afectando «directamente» a su valor en la lista de los argumentos del bucle: los {collecte utf8_spanish_ci}
, {collecte 'utf8_spanish_ci'}
, {collecte{utf8_spanish_ci}}
... no funcionarán y un error PHP será visualizado.
Solamente es posible utilizarlo por #GET{}
después de haberlo declarado anteriormente con #SET{}