Aprendiendo SPIP [16]

[16] Criterios (II)

, por dani

Usando criterios de comparación, negación, expresiones regulares y entorno filtramos la salida de un bucle.

Criterios de comparación

Un criterio bastante usado en los bucles es:

<BOUCLE_articulos(ARTICLES){id_rubrique=12}>

Mediante este criterio obtenemos sólo los artículos de la sección 12.

La sintaxis general de estos criterios es:
{criterio SIGNO constante}

- SIGNO: =, <, >, <= , >=
- criterio: cualquier criterio de la base de datos (ver artículo anterior)
- constante: un valor constante que puede ser número, letra o palabra e incluso una #BALIZA

Ejemplos (relativos a un bucle ARTICLES):

- 1) {titre=Matemáticas}
- 2) {id_secteur=3}
- 3) {id_rubrique>=23}
- 4) {titre<=d}
- 5) {id_rubrique=#GET(m)}

Los ejemplos con constantes numéricas (2 y 3) son fáciles de entender:
2) sólo artículos del [1]sector 3

3) sólo artículos de las secciones 23, 24, 25, ...

Para los ejemplos donde la constante es texto debemos tener en cuenta que SPIP (al menos la versión 1.9.1) no distingue entre mayúsculas y minúsculas en las constantes que ponemos a la derecha del signo.
Por tanto los criterios:
- {titre=Matemáticas}
- {titre=MATemáticas}
- {titre=matemáticas}

serían iguales. Sin embargo el criterio {titre=matematicas} ya sería distinto (observa que no lleva tilde).

1) Todos los artículos cuyo título sea ’matemáticas’ (con mayúsculas o minúsculas pero con su tilde)

4) Con {titre<=d} obtendremos todos los títulos que empicen por una letra anterior a la ’d’, es decir, el título puede empezar por a(A), b(B) , c(C). OJO: también se incluirían títulos que empiecen por un número.
¿Incluiría también los que empiecen por d? NO. Sin embaro pone <=, debería incluir también el =. Lo que ocurre es que cualquier palabra o frase que empiece por d (ejemplo: "dar") es alfabéticamente porterior a "d" (si el título de un artículo fuese sólo "d" o "D" si que estaría incluido)

5) en este ejemplo, en lugar de una constante tenemos una baliza, en realidad tenemos ’el valor de una baliza’ (que es por tanto una constante).

Criterios usando expresiones regulares

Las expresiones regulares son una especie de comodines que pueden representar a un conjunto de palabras o cadenas de caracteres (ejmplo: la expresión regular «^[A]» significa cualquier cadena de caracteres que empiece por la letra «A»).

Son muy usadas en algunos lenguajes de programación y sobre todo en sistemas UNIX/Linux.

Una expresión regular es un recurso muy potente aunque de cierta complejidad. Como su estudio está fuera del alcance de este manual, tan sólo veremos algunos ejemplos.

Para usarlas con los criterios de spip se sigue esta sintaxis:
{criterio==expresion_regular}

- Nótese que usamos doble signo «==» (el doble signo igual le indica a spip que lo que viene a continuación es una expresión regular)
- También se aplica aquí el caso especial de spip (no hay diferencia entre mayúsculas y minúsculas)

Ejemplos:

1) {titre==mate}
El título contiene la palabra ’mate’. Valdría títulos como:
- La enseñanza de las Matemáticas
- LA materia celeste
- El MATERIAL de obra
Observa que es diferente al criterio {titre=mate} donde sólo admitiría títulos formados exclusivamente por la palabra ’mate’

2) {titre==^[abc]}
El título empieza por a(A), por b(B) o por c(C)

3) {titre==^[a-f]}
El título empieza por cualquier letra entre a(A) y f(F)

4) {titre==ar$}
El título termina por «ar»

5) {id_rubrique==(2|3|4|9)}
La sección puede ser la 2, la 3, la 4 o la 9

negación!

Para expresar "desigual" o "no es igual" se emplea el carácter !
- para criterios de comparación sería !=
- para criterios de expresiones regulares sería !==

Ejemplos:

>BOUCLE_articulos(ARTICLES){id_rubrique!=8}
artículos de cualquier sección excepto la 8

>BOUCLE_articulos(ARTICLES){titre!==guerra}
artículos cuyo título no contenga la palabra guerra

criterios de entorno

Es muy frecuente ver bucles con expresiones del tipo:

<BOUCLE_articulos(ARTICLES) {id_rubrique}>

Vemos que hay un criterio id_rubrique, pero no vemos ni el signo ni la constante a la derecha del signo. En estos casos el signo (aunque no estçe visible es el signo igual =). Pero ¿igual a qué? Falta la constante y entonces se dice que la toma del entorno y lo puede hacer de dos formas distintas:

- toma el valor de la url
si la página es http://miservidor.es/spip.php?rubrique4 tomaría como valor {id_rubrique=4}

- toma el valor de los elementos del bucle en el que se encuentra. Veamos un ejemplo:

<BOUCLE_secciones(RUBRIQUES){id_rubrique<4}>
    <BOUCLE_articulos(ARTICLES){id_rubrique}{!par date}
            #TITRE <br />
    </BOUCLE_articulos>
</BOUCLE_secciones>

En el ejemplo anterior vemos dos bucles anidados (uno dentro de otro). Hay un bucle de secciones y dentro de él otro bucle de artículos. Hay que entenderlos desde fuera hacia dentro.

- Primero hay un bucle de secciones cuya identidad sea menor que 4, es decir listará 3 secciones: sección 1, sección 2 y sección 3
- Dentro de cada sección tiene que listar (por el bucle artículos) todos los artículos que cumplan el criterio {id_rubrique} (cuando esté en la sección 1 será {id_rubrique=1}, cuando esté en la dos será {id_rubrique=2}, pues va tomando la id_rubrique del entorno).

Resulta más difícil explicarlo que entenderlo y la mejor manera de entenderlo es, como siempre, practicándolo y comprobándolo.

Notas

[1un sector es una sección principal, que sale directamente de la raíz y por tanto no es subsección de ninguna otra