Cuando hay elementos de texto y bucles comunes a varios esqueletos, es lógico querer «factorizar» dichos elementos, es decir extraerlos de las páginas donde se encuentran, agruparlos en un archivo separado y llamarlos desde los otros esqueletos. De esta manera se agrupa el código común en un archivo único, lo que facilita notablemente las modificaciones que afectan a varios esqueletos de una sola vez.
Normalmente, este tipo de elementos se instalan en archivos independientes llamados a partir de numerosos esqueletos:
— declaraciones de encabezado de página HTML (llamadas javascript, hojas de estilo, etc.),
— elementos de navegación comunes a la mayoría de las páginas (parte superior de la página, columna izquierda, etc.), banner superior (logotipo, enlaces a los créditos del sitio, página de contacto, etc.),
— un pie de página, etc.
Sintaxis de inclusión
Quienes están acostumbrados a PHP (u otros lenguajes informáticos) conocen la función include
, cuyo principio es similar al que se presenta aquí para SPIP.
Con SPIP, se puede llamar a un esqueleto desde otro con la baliza <INCLURE>
(también se puede utilizar <INCLUDE>
, que es idéntica). Su sintaxis completa es:
<INCLURE{fond=squelette, param}>
<INCLURE{fond=squelette, param1,param2}>
<INCLURE{fond=squelette, param1,param2}{param3=#LISTE{valA,valB}}>
El «esqueleto» es el nombre del archivo que se quiere integrar en la página.
Por ejemplo, imaginemos que todas las páginas del sitio muestran la misma información abajo de la página. Se agrupa entonces el código HTML y SPIP de este «pie de página» en un archivo «pie.html
» (siempre siguiendo el principio de parejas de archivos destinados a construir esqueletos SPIP). Basta integrar en cada uno de los esqueletos que llevan ese «pie de página» el siguiente código en el lugar deseado:
<INCLURE{fond=pie}>
Inclusiones dependientes del contexto
Ciertas inclusiones pueden depender del contexto. Por ejemplo, imaginemos un esqueleto «jerarquia
», que muestre el camino que lleva desde la raíz hasta una sección; se llamaría a esta página por un URL de la forma:
«spip.php?page=jerarquia&id_rubrique=xxx
».
En los esqueletos donde se quiera mostrar el camino desde la raíz a cierta sección (por ejemplo la sección actual de un artículo), hay que indicar que el parámetro correspondiente es {id_rubrique}
. Si fuera necesario, creamos un bucle en el que se genera contextualmente el número apropiado de sección, y se incorpora el siguiente código dentro de este bucle:
<INCLURE{fond=jerarquia, id_rubrique}>
Nota: en este caso, el esqueletojerarquia.html
tendrá que comenzar con un bucle secciones con el criterio{id_rubrique}
...
Se puede imaginar que, en ciertos esqueletos, se desee recuperar ya no el camino hasta cierta sección «variable» (según el contexto, por ejemplo un parámetro pasado en la URL), sino en función de una sección cuyo número (identificador) se sabe de antemano. Para ésto se puede fijar el valor del parámetro así:
<INCLURE(fond=jerarquia){id_rubrique=5}>
Nota. Es posible indicar varios parámetros en la baliza <INCLURE>
; sin embargo, tal caso es poco frecuente. En todo caso, dichas variables se acumulan por un «Y lógico» al igual que cuando se los adjunta en la definición de los bucles. Evita añadir parámetros inútiles, que harán la caché menos eficaz y tu sitio más lento.
Nota. El archivo incluido es, a su vez, un esqueleto y, por lo tanto, dicho esqueleto tendrá su propio valor #CACHE
[1]
Transmitir todo el contexto actual
El parámetro env
se utiliza para transmitir el contexto de compilación del esqueleto actual al incluido.
<INCLURE{fond=esqueleto, env}>
En un contexto multilingüe
Si está activado el multilingüismo de SPIP, se puede definir un idioma de entorno para un esqueleto incluido, utilizando el parámetro {lang}
.
- Si no se utiliza ningún parámetro, es decir bajo la forma <INCLURE{fond=pie}>
, se llamará al esqueleto incluido con el idioma principal del sitio,
- <INCLURE(fond=pie){lang=ar}>
utilizará el árabe al llamar al esqueleto incluido. Por supuesto, basta con reemplazar «ar» por el código ISO del idioma deseado: en para el inglés, fr para el francés, vi para el vietnamita, etc. (ver Internacionalizar los esqueletos),
- y <INCLURE(fond=pie){lang}>
llama al esqueleto en el idioma actual del contexto de inclusión.
Cabe notar que esto hace posible utilizar códigos de archivos de idiomas en los esqueletos incluidos (para mayores explicaciones sbre los archivos de idiomas, ver Internacionalizar los esqueletos).
Adicionalmente, los esqueletos incluidos están sujetos a las mismas técnicas de selección de idioma que los esqueletos de «primer nivel». En otras palabras, los esqueletos incluidos (en este caso pie.html
) pueden ser especificados de acuerdo al idioma escogido (pie.ar.html
, por ejemplo) de la misma manera que cualquier otro esqueleto. Una vez más, ver «Internacionalizar los esqueletos» para más detalles.
<INCLURE>
y {doublons}
Existe un criterio de bucle {doublons}
. Sin embargo, si se utiliza un <INCLURE>
en un esqueleto, los duplicados almacenados no se pasan al esqueleto incluido.
Es posible solucionar este problema. Basta con añadir el parámetro {doublons}>
a la llamada al esqueleto que se desea incluir. Por ejemplo, <INCLURE{fond=mi pagina, doublons}>
.
Tenga en cuenta, sin embargo, que los duplicados seleccionados en el esqueleto incluido no se "mueven hacia arriba" en el esqueleto incluido.
<INCLURE>
y ajax
Es fácil utilizar la tecnología ajax, que permite hacer clic en un enlace y actualizar la página sólo en el área que cambiaría si se volviera a mostrar toda la página con los nuevos parámetros. Para más detalles, véase el artículo `ajax` para las inclusiones.
#INCLURE
un archivo que no es un esqueleto
La etiqueta #INCLURE también puede utilizarse para incluir un archivo que no sea un esqueleto: para ello, basta con indicar directamente el archivo incluido como primer argumento, omitiendo el "fond=" que se utiliza para incluir esqueletos. El fichero se lee y su contenido se visualiza en el contexto de llamada sin ser interpretado por SPIP.
Ejemplos de utilización en diferentes ficheros SPIP o plugins :
- en sedna.js.html : [(#INCLURE{javascript/sedna.js}|...]
- en adminer.html : [<style type="text/css">(#INCLURE{adminer.css}|compacte{css})</style>]
- en portfolio_document.html : [(#INCLURE{javascript/medias_edit.js}|compacte{js})]
- en gis.js.html : [(#INCLURE{lib/leaflet/dist/leaflet-src.js})]
La mayoría de estos usos implican archivos javascript o CSS, pero es posible incluir otros tipos de archivos:
- en favicon.ico.html : [(#INCLURE{favicon.ico}|sinon{#INCLURE{spip.ico}})]
Véase también
- `ajax` para las inclusiones
- Les aides au débuggage de squelettes et plus particulièrement l’appel de « var_mode=inclure »
En Programmer.spip.net