Utilizar modelos

SPIP 1.9.1 introduce la noción de modelo.

Qué es un modelo ? Se trata de un pequeño esqueleto SPIP que describe un fragmento de HTML fácil de insertar en otro esqueleto o bien (hete aquí la principal novedad) en el texto de un artículo, desde la propia redacción.

Inspirado en los modelos de la Wikipedia, el sistema de modelos ofrece nuevas capacidades a los y las webmasters, y las redactoras y redactores.

Los modelos son una extensión del clásico recurso <img1> y <doc1>. Éstos se corresponden desde esta versión a los modelos dist/modeles/img.html y dist/modeles/doc.html que son esqueletos modificables.

Su sintaxis se extendió, y es posible especificar, además de la alineación (<img1|left>, <img1|right> o <img1|center>), una clase más genérica, que se corresponde a un esqueleto en particular, si existe, o un estilo CSS.

Por ejemplo si se agrega una imagen con con la forma <img1|mi_clase> SPIP buscará el modelo modeles/img_mi_clase.html, y si este fichero no existe utilizará el modelo modeles/img.html, pero agregando el atributo de estilo CSS class="mi_clase").

Pero los modelos no se limitan a las imágenes y los documentos; así que es posible crear nuevos atajos de la forma <modelo1>, simplemente añadiendo un esqueleto en el subdirectorio modeles/ ¡de tu directorio de esqueletos!

En ausencia de todo modelo que corresponde al atajo indicado (por ejemplo, <breve1>), el gestor de modelos de SPIP verifica si conoce el objeto pedido (aquí, breve), y si este último tiene un URL.

<breve1> En este caso (comprobado aquí, ya que las breves son conocidas por el sistema y disponen de una función de URL), SPIP sustituye el atajo <breve1> por un pequeño cuadro flotante, con un vínculo hacia la breve, y la visualización de su título, como si se hubiese indicado [->breve1].

Si el objeto se desconoce, SPIP deja el atajo intacto, para que esté tratado eventualmente más tarde (por un plugin o un filtro suplementario), o simplemente sea ignorado.

Por otra parte, es posible pasar parámetros suplementarios a los modelos (como se hacía para los documentos flash "embed", con el atajo <emb1|autostart=true>). La sintaxis se generaliza e incluso se acepta HTML, como en el ejemplo siguiente:

que llama al modelo modeles/peli.html, que interpretará los parámetros para motrar la foto número 12, en un marco de color #ff0000, con una leyenda en html.

Múltiples aplicaciones

Estamos muy lejos de haber explorado todas las aplicaciones posibles de los modelos. Describimos aquí algunas que se nos ocurrieron. Si encuentran otras, no duden en compartirlas proponiendo sus modelos en SPIP Zone/SPIP Contrib, que tienen sus secciones dedicadas al respecto.

-  Cambiar el aspecto de los atajos de documentos. Muy solicitada, esta funcionalidad era difícil de lograr hasta ahora, puesto que era necesario modificar código php en los ficheros del núcleo de SPIP. En adelante, basta con volver a copiar dist/modeles/img.html dentro de un subdirectorio modeles/ de tu directorio de esqueletos, y modificar este fichero. De la misma manera se puede procedes para los recursos <doc1> y <emb1>, aunque este último tenga una alta complejidad ...
Atención: no te lances a modificar modelos para cambios menores, en particular referidos a la estética, que a menudo son más fáciles de modificar desde los estilos spip_documents_xx a partir de los ficheros CSS de tu sitio.

-  Reproducir un sonido con un player en flash: Un modelo modeles/son_player.html podría dar un atajo <son12|player>. [1]

-  Asociar un sitio a un artículo. Añadiendo en sus esqueletos un modelo modeles/site_box.html, se crea inmediatamente un nuevo atajo del tipo <site1|box>. Se escribe entonces el modelo (con bucles clásicos) para indicar el nombre del sitio, seguido de vínculos hacia los 3 últimos artículos sindicados, en una caja flotando sobre la derecha, y he aquí un cuadro de información relacionada fácil a colocar en un artículo. Un parámetro podría indicar el número de artículos que deben mostrarse, y la presencia o no de resúmenes, etc.

-  Agregar una imágen tipo estampilla. Una vez que se sabe hacer un esqueleto que muestra una fotografía en forma de estampilla postal (ver Un site dûment timbré), es suficiente crear un modelo modeles/estampilla.html pora crear el recurso <estampilla12>. Obviamente se podría agregar parámetros de importancia como color, elección del formato de la estampilla, etc. [2]

Por supuesto se pueden realizar de la misma forma modelos que muestren las imágenes en sepia, en versión reducida, etc. Seguramente todo esto estará rápidamente disponible en forma de plugins.

-  Crear un artículo compuesto. Supongamos que necesitas un artículo compuesto del "epígrafe" del artículo 1 y del "texto" del artículo 2. Nada más simple: se crean dos modelos, que devuelven simplemente, para uno, el epígrafe del artículo pedido, para el otro su texto, y en nuestro artículo compuesto se indica en el campo epígrafe <article1|chapo>, y en el campo texto <article2|texte>. Se pueden añadir filtros, balizas y demás yerbas a discreción...

-  Instalar un artículo en varias secciones. Programando modelos <article1|chapo>, <article1|texte> etc, es posible crear una copia dinámica de un artículo en otro, sin duplicar los datos. Se obtiene así un artículo "fantasma" que se puede guardar en una nueva sección (con la posibilidad extra de titularlo diferente o de añadirle elementos).

-  Realizar una encuesta. El plugin Forms, que permite crear formularios y encuestas e incrustarlos en artículos con el atajo <formX>, está escrito con modelos.

-  Indicar una cita aleatoria. Si usaste las breves para poner citas, un atajo <cita|aleatoria>podría extraer una al azar (criterio {par hasard}{0,1} dentro de un bucle BREVES), y mostrarlo en en una caja flotante sobre el texto corriente.

-  Insertar un documento un idioma distinto al del artículo. Como los modelos funcionan como inclusiones, el parámetro lang=xx está disponible. Si uno de sus documentos es bilingüe (por ejemplo con un "bloque multi" en la descripción), se puede indicar la descripción en esperanto, en un artículo en japonés, llamando <doc1|left|lang=eo>. Si el esqueleto del modelo contiene cadenas de lengua, estas se interpretarán en la lengua pasada como parámetro.

-  Adjuntar un gráfico Se pasa una tabla de datos al modelo, y este procesará los datos para crear un gráfico estadístico e insertarlo en el flujo de texto.

-  Un intertítulo en forma de imágen por qué no crear un recurso <imagen|texto=Mi intertítulo> ?

Parámetros en abundancia

El sintaxis de los atajos de modelos es de la forma <modelo12>, <modelo|parametro1=truco|parametre2=cosa> o <modelo12|alineacion|parametro1=etc>. Los parámetros pueden componerse de HTML y atajos SPIP (a condición, claro está, de que los modelos invocados tengan previsto procesarlos).

Se tendrá en cuenta que, para evitar toda colisión con las balizas HTML, un modelo no puede ser llamado por un atajo como <modelo>, que no contiene ni cifra ni el símbolo |.

Los parámetros pueden extenderse en varias líneas, lo que permite la sintáxis relativamente clarificada:

<modelo 10
 |pais=Alemania
 |poblacion=82000000
 |superficie=357027
 |himno=<i>Das Lied der Deutschen</i>
 |url=http://es.wikipedia.org/wiki/Alemania
>

El esqueleto recupera todos estos parámetros en la baliza #ENV, y asi #ENV{poblacion} vale 82000000. Dado que se aseguró esta baliza contra toda inyección de javascript, si se quiere permitir el HTML en un parámetro, conviene utilizar la notación #ENV*{himno} ; y si se quiere además aplicar la tipografía de SPIP, se puede emplear [(#ENV*{himno}|typo)] o [(#ENV*{himno}|propre)].

El parámetro principal (aquí, 10), se pasa de dos formas : #ENV{id}=10, y #ENV{id_modelo}=10. Lo que permite acceder para un modelo invocado con el atajo <article3|chapo>, al epígrafe del articulo 3 con el siguiente bucle : <BOUCLE_a(ARTICLES){id_article}>#CHAPO</BOUCLE_a>

o bien a las breves ligadas a la palabra clave 3 mediante: <BOUCLE_b(BREVES){id_mot=#ENV{id}}>#TITRE</BOUCLE_b>

Como se ve, cada modelo debería tener su propia documentación, ya que el atajo no indica nada en sí mismo sobre la explotación hecha de los elementos pasados por el atajo.

Un empleo posible en los esqueletos

Los modelos no se limitan a atajos dentro los artículos. Es posible llamarlos directamente desde un esqueleto, utilizando la baliza #MODELE{modelo} o [(#MODELE{modelo}{p1=valor,p2=cosa}{p3=etc}|filtro...)]; aunque esta utilidad no es tan nuevo, ya que es equivalente a una inclusión (estática) de esqueleto (también permitida por la nueva baliza #INCLURE).

Los modelos por defecto

SPIP incluye los siguientes modelos por defecto:

-  img, doc, emb,
-  article_mots y article_traductions, que dan respectivamente la lista de las palabras clave asociadas a un artículo, y una lista de sus traducciones (Atajos : <article1|mots> y <article1|traductions>, pero estos modelos también son usados por el esqueleto dist/article.html);
-  lesauteurs, que define el resultado de la baliza #LESAUTEURS, pero no puede llamarse como un atajo.
-  Y una serie de modelos de paginacion (ver El sistema de paginación).

Algunos consejos para escribir un modelo

Es aconsejable comenzar por reflexionar sobre la sintaxis que se quiere adoptar : ¿Este modelo está vinculado a un artículo preciso ? En caso afirmativo, se eligirá un atajo del tipo <article1|xxx>.

Una vez establecida la sintaxis, se crea el fichero modeles/article_xxx.html, y se escribe simplemente la baliza siguiente : #ENV. Luego, en un artículo de prueba, se tipea nuestro atajo <article1|xxx|param=x...> ; se verá entonces (bajo una forma un poco criptica, ya que se trata de un flujo de datos serializado) el "medio ambiente" que se le pasó al modelo. Por ejemplo, se puede distinguir nuestro identificador de artículo (bajo la baliza #ENV{id} y #ENV{id_article}.

A continuación se puede comenzar a escribir el esqueleto de nuestro fragmento de página: <BOUCLE_x(ARTICLES){id_article}> ou <BOUCLE_x(ARTICLES){id_article=#ENV{id}}>. Y aquí partimos...

Para que nuestro modelo esté completo, es necesario contemplar sintáxis más completas como <article1|xxx|left> y [<article1|xxx>->www.spip.net].

En el primer caso el parametro align=left se ha pasado al modelo (y entonces es deseable que el modelo se alinee del lado pedido).

En el segundo caso, el vínculo pasó en un parámetro lien=http://www.spip.net, y la clase de vinculos lien_classe=spip_out. Se recomienda tener en cuenta el url pedido, transformándolo en vínculo en alguna parte en el modelo (Por ejemplo en el título o en un icono); en este caso, es necesario adjuntar a a la primer baliza del modelo un clase class="spip_lien_ok", quen indicará al gestor de modelos que el vínculo se tuvo en cuenta (pues, de lo contrario, el gestor añadirá un <a href=...>...</a> a todo el modelo producido).

Por lo que se refiere a los parámetros, la baliza#ENV{x} se ha concebido para evitar cualquier inyección de HTML o javascript no deseada. En un modelo, se puede desear autorizar el HTML en los parámetros: es necesario entonces utilizar #ENV*{x} para recuperar los datos, y filtrarlos eventualmente con |propre o |typo, según el tipo de datos (texto que puede implicar varios apartados, o simple línea de texto).

En cuanto a la programación, se recomienda crear sus modelos basado en bucles, sin ningún código php ni baliza dinámica. A tener en cuenta no obstante: si un modelo utiliza php, se prioriza el resultado que hubiese en CACHE, y no el del propio SCRIPT (como es el caso con los esqueletos).

Notas

[1el Plugin Lector Multimedia implementa este atajo

[2Si se prefiere que el atajo se llame <img12|estampilla>, el nombre del modelo deberá ser <code>modeles/img_timbre.html.

Traducción: Martín Gaitán, para la comunidad SPIP

Autor o autora tin Publicado el: Actualizado: 26/10/12

Traducciones: عربي, català, Deutsch, English, Español, français, italiano, Nederlands, Türkçe