SPIP

Artículos de esta sección

  • [17] Un sencillo esqueleto para descargar

    El esqueleto llamado esqueleto_dani, está creado pensando en los novatos en spip.

    Aunque no está completo, tiene los prinicpales archivos: portada, secciones, artículos, forum, breves, etc.

    Comprimido en .tgz (usuarios de Linux) (10 kb.)

    esqueleto_dani.tgz

    Comprimido en .zip (todos los usuarios) (17 kb.)

    esqueleto_dani.zip

    Una imagen de la portada:

  • [16] Criterios (II)

    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.

  • [15] Criterios (I)

    Los criterios en SPIP son condiciones que se aplican a los bucles con objeto de ordenar, filtrar o limitar los resultados del bucle.

    Se expresan entre llaves de la forma:

    <BOUCLE_articulos(ARTICLES) {criterio}>

    Orden de los resultados (criterios de clasificación)

    Son de la forma {par criterio}
    Ordena los resultados del bucle según criterio

    Ejemplo: {par date} (ordena por fecha)

    Podemos elegir un criterio por cada campo de la Base de Datos. En el artículo Todas las balizas propias de un sitio vimos todos los campos de la base de datos spip_articles, cada uno de los cuales daba lugar a una #BALIZA (observe que usamos mayúsculas para las balizas y minúsculas para los criterios). De la misma forma, cada campo da lugar a un criterio [1].

    Por tanto, para un bucle ARTICLES podríamos elegir cualquiera de los 29 criterios. Como ejemplo:

    {par titre} ordena por título
    {par date} ordena por fecha
    {par visites} ordena por número de visitas

    Orden descendente
    Podemos cambiar el orden normal (ascendente) por un orden descendente; para ello tenemos dos opciones:

    - {par criterio}{inverse}
    - {!par criterio}

    Ejemplo:

    <BOUCLE_articulos(ARTICLES) {par date}{inverse}>

    ordenaría los artíclos por fecha en orden descendente (los más recientes primero)

    Es recomendable usar la segunda opción. Veamos este caso:

    <BOUCLE_articulos(ARTICLES) {par date}{inverse}{par titre}>

    <BOUCLE_articulos(ARTICLES) {!par date}{par titre}>

    Ambas opciones producen el mismo efecto, pero el primer caso puede confundirnos: el {inverse} ¿se aplica al criterio anterior, al siguiente o a todos? inverse se aplica al criterio inmediatamente anterior.
    Si empleamos el segundo caso, queda más claro que lo que se invierte es la fecha

    Varios criterios a un mismo bucle
    Se puede emplear más de un criterio usando una de las dos opciones:

    -  {par criterio1}{par criterio2}
    -  {par criterio1, criterio2}

    Ejemplo:
    <BOUCLE_articulos(ARTICLES) {par visistes, titre}>
    ordenaría por número de visitas y entre los que tengan las mismas visitas los ordena por título

    Criterios especiales

    {par hasard} ordena al azar

    Aunque siempre ponemos como eljemplo el bucle ARTICLES, los demás bucles (RUBRIQUES, MOTS, BREVES, AUTEURS, FORUM, etc.) también se pueden ordenar. Sin embargo los criterios son distintos. No podemos ordenar un bucle RUBRIQUES por las visitas {par visites} puesto que la base de datos spip_rubriques no tiene el campo ’visites’. No obstante algunos criterios coincidirán: por ejemplo los campos ’date’ y ’titre’.

  • [14] Galería de fotos como ejemplo de paginación y portafolio

    Cuando un boucle produce muchos resultados (una sección con muchos artículos por ejemplo), se hace necesario paginar de forma que se presenten unos 10 (u otro número) resultados por página (imagínate si google no usara paginación).

    Usaremos el sistema de paginación de la versión 1.9 de spip (no válido para versiones anteriores, ni siquiera para la 1.9 beta 1).

    Tenemos que entender que lo que paginamos es un boucle, o mejor dicho, el resultado de un boucle.

    SPIP, en sus esqueletos por defecto ya trae incluidos ejemplos de paginación. Por ejemplo si miramos el esqueleto de una sección: roubrique.html

    Boucle artículos con paginación

    Observamos tres eiquetas a colocar:

    - baliza #PAGINATION
    - baliza #ANCRE_PAGINATION
    - criterio de boucle {pagination}

    El criterio {pagination} indica el número de elementos del boucle por página, que por defecto es 10.
    Si quisiéramos paginar de 20 en 20, el criterio sería: {pagination 20}

    La baliza #PAGINATION se coloca donde queramos que aparezca la paginación propia:
    [0 | 10 | 20 | 30 | 40 | ...]
    Aunque lo normal es ponerlo al final del boucle, también se puede poner al principio (ver siguiente código):

    <B_articles>
    #ANCRE_PAGINATION
    [<P align="center>(#PAGINATION)</p>]
      <BOUCLE_articles(ARTICLES)  {par date}{inverse} {pagination}>
        <a href="#URL_ARTICLE">#TITRE</a>
      </BOUCLE_articles>
    </B_articles>

    La única diferencia es que la propia paginación ([0 | 10 | 20 |...]) aparezca antes que los elementos (en este caso 10) o después de ellos.

    La baliza #ANCRE_PAGINATION es un ancla (etiqueta HTML situada en sitio determinado de la página) donde nos llevará cada vez que pulsemos nueva página. Es decir, cuando pulsemos 10 ([ 0 | 10 ]) para ver los elementos 11 a 20, no nos llevará al principio de la página sino al lugar donde esté el ancla (normalmente al principio del boucle, en este caso al alemento 11).

    El criterio {doublons}

    Resulta de utilidad este criterio cuando queremos evitar duplicar elementos ya aparecidos en otro boucle. Ejemplo:

    Supongamos que tenemos en portada de nuestra web los tres últimos artículos (los primeros que aparecen) destacados y a los siguientes artículos los paginamos de 10 en 10. Tenderemos un boucle para los 3 destacados y otro blucle para los demás (paginados). En éste segundo boucle hay que poner el criterio doublons para que no se repitan los 3 primeros (que ya han aparecido en otro boucle).

    Un ejemplo real de paginación se puede ver en la portada de http://lubrin.org con 5 artículos destacados y el resto paginados en grupos de 10 artículos.

    El portafolio

    En un artículo anterior vimos como se podían insertar imágenes y documentos en nuesto artículo. Para ello usábamos los paneles de la izquierda: AÑADIR UNA IMAGEN y AÑADIR UN DOCUMENTO. Tanto la imágen como el documento quedaban insertados entre el texto de artículo (al principio, al final, en medio, izquierda, ... en la parte que queramos).

    Una nueva forma de añadir imágenes y documentos es mediante el portafolio. Para ello se usa el panel que aparece al final del artículo (No cuando estamos tecleando texto, sino una vez pulsado Guardar).

    Los documentos o imágenes añadidos de esta forma quedan como documentos adjuntos (en el portafolio) y aparecen después del texto del artículo (los esqueletos se pueden cambiar para ponerlos donde queramos). Para ver como aparecen en los esqueletos por defecto de spip, mire al final del texto de este artículo (he adjuntado varios).

    Galería de fotos

    Si adjuntamos varios imágenes en el portafolio, vemos que spip (en sus esqueltos por defecto y siempre hablaremos de la versión 1.9) nos pone como iconos unas miniaturas de las mismas, de forma que al hacer clic sobre ellas nos muestra la imagen en tamaño grande: ya tenemos por tanto nuestra galería de fotos.

    Pero se puede mejorar claro está.

    En primer lugar veamos cuál es que código que origina el portafolio. Evidentemente tenemos que mirar el fichero article.html y seguramente retocarlo para personalizar un poco nuestra galería.

    Sin embargo, si retocamos el article.html eso va a afectar a la manera de mostrarse el resto de artículos de nuestra web. La solución pasa por:
    - Crear un sección especial llamada por ejemplo Galería de fotos
    - Modificar el esqueleto de los artículos sólo para esa sección, aunque también para las subsecciones (que al final acabamos subiendo muchas fotos y queremos tenerlas organizadas)
    - Los artículos que incluyan colecciones de fotos los pondremos en esa sección especial.

    ¿Es posible crear un esqueleto especial para los artículos de una sección? Sí que es posible: creando un fichero llamado article-x.html ó article=x.html (donde x es el número de la sección).

    article=x.html (esqueleto para artículos de la sección x)

    article-x.html (esqueleto para artículos de la sección x y sus subsecciones)

    Cuando hacemos clic para visualizar un artículo, spip mira a qué sección pertenece y buscar un fichero del tipo article-x.html o article=x.html (para aplicarle ese esqueleto especial) y si no lo encuentra le aplica el esqueleto normal: article.html

    Por tanto, una vez creada nuestra sección especial x [1], abrimos el fichero article.html que modificaremos y será guardado (una copia del mismo) con el nombre de article-x.html.

    Veamos el código que origina el portafolio:

    Si examinamos el código vemos tres bucles de DOCUMENTOS:

    <BOUCLE_documents_portfolio(DOCUMENTS) {id_article} {mode=document}{extension==(png|jpg|gif)$} {par date} {doublons}>
    [<a href= "[(#URL_ARTICLE| ... ]> (#LOGO_DOCUMENT||image_reduire{0,60}| ... </a>]
    </BOUCLE_documents_portfolio>

    En este bucle se listan todos los documentos (imágenes png, jpg o gif) del artículo (id_article) en cuestión. De cada imagen se ofrece el logo (miniatura de la imagen) reducida a 0x60 (cualquier ancho x 60 de alto)

    <BOUCLE_afficher_document(DOCUMENTS) {id_document} {mode=document}{extension==(png|jpg|gif)$}>
    ...
    #EMBED_DOCUMENT
    ...
    </BOUCLE_afficher_document>

    En este segundo bucle se listan las imágenes (png, jpg o gif) anexas al documento (id_document) en cuestión. Es decir una sóla imagen que corresponda con id_document (documento seleccionado: al que hayamos hecho clic en la miniatura).
    De esta imagen se ofrece:
    - #EMBED_DOCUMENT la propia imagen en tamaño original
    - Además título(#TITRE) y descripción(#DESCRIPTIF)

    <BOUCLE_documents_joints(DOCUMENTS) {id_article} {mode=document} {par date} {doublons}>
    ...  title="<:bouton_telecharger:>" ...
    </BOUCLE_documents_joints>

    Un úiltimo bucle con todos los documentos del artículo (de cualquier extensión) con un botón para descargarlos

    Los cambios que realizaremos serán:

    - Eliminar el tercer bucle, aunque se puede usar para que el visitante pueda descargar todas las imágenes en un fichero comprimido (tendremos que haberlo adjuntado primero)

    - Eliminar la barra lateral de navegación, pues es preferible tener más espacio disponible. Sería eliminar todo lo que hay entre las etiquetas:

                    [(#REM) Menu de navigation laterale ]
                    <div id="navigation">
                   ...
                    </div><!-- fin navigation -->

    - Personalizar el tamaño de las miniaturas: en lugar de 0x60 podemos poner 100x80 u otro tamaño

    - Mover el texto del artículo y demás al final, dejando las miniaturas y las imágenes al principio (cada cual lo puede poner donde quiera)

    - Paginar el bucle de las miniaturas (de 6 en 6 por ejemplo)

    - Usar alguna etiqueta HTML para centrar, cambio de párrafo, etc. hasta que quede a nuestro gusto

    Con todo ello tu galería debe quedar como esta muestra:
    Galería de fotos

  • [13] Balizas calculadas por spip en los artículos

    Aparte de las Balizas propias de un artículo, SPIP calcula algunas balizas más. Veamos cuáles son, su descripción y algún ejemplo real:

    #BALIZA Descripción
    #NOTES Notas al pié de página
    #INTRODUCTION Contenido de la baliza #DESCRIPTIF. Si ese campo no lo rellenamos, toma los primeros caracteres del inicio del artículo (epígrafe y texto)
    #LESAUTEURS Autor(es) del artículo
    #PETITION La descripción de la petición en caso de existir (1)
    #URL_ARTICLE URL del artículo
    #FORMULAIRE_FORUM Formulario para enviar comentarios al artículo
    #FORMULAIRE_SIGNATURE Formulario para firmar las peticiones(1)
    #PARAMETRES_FORUM Parámetros para completar la URL de un determinado comentario

    (1) Las peticiones se activan en el bloque de la izquierda Foro y petición

    Al activar las peticiones para un artículo,

    los usuarios pueden sugerir enlaces, aunque no de forma anónima: deben dar su correo y spip le envía un mail para que confirmen su firma.

    Las dos balizas relacionadas con las peticiones son: #PETITION (sólo la descripción) y # FORMULAIRE_SIGNATURA (el formulario para la petición).

    En un artículo de ejemplo he activado las peticiones para que puedas probar como funcionan. Puedes enviar una URL y un comentario. El artículo de prueba está en:
    http://lubrin.org/probando_spip/spi...

    Veamos ahora un ejemplo de todas las balizas calculadas aplicado al artículo que estás leyendo: Ver ejemplo