{collecte}

El criterio {collecte} permite especificar una regla de ordenación (la «collation») para la consulta generada por un bucle (llamada de la cláusula «COLLATE» de MySQL [1]).

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:

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

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:

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>

devolverá, en cambio, estos artículos en el orden alfabético correspondiente a la regla de ordenación especificada:

Nana
nina
Nina
Niña
Nono
Nunu
Ñ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="PGNvZGUgY2xhc3M9InNwaXBfY29kZSBzcGlwX2NvZGVfaW5saW5lIiBkaXI9Imx0ciI+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{}

Notas

[1Ver la documentación oficial para la cláusula «COLLATE» de Mysql: http://dev.mysql.com/doc/refman/5.0... y: Un ejemplo del efecto de aplicar una regla ordenación

[2En el juego de caracteres latin1, 8 reglas de ordenación son accesibles:

| 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 o autora David Sánchez Crespillo Publicado el: Actualizado: 26/10/12

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