SPIP 2.0

SPIP ha llegado a la versión 2.0, ocho años después de la versión inicial para el proyecto Uzine, siete años después del lanzamiento de la versión 1.0, y casi dos años después de la versión anterior.

La rama 1 de SPIP es un sistema integrado de la publicación, es decir, un sistema sobre una única base de datos, listo para su usar.

Sus características, especialmente su sistema de esqueletos, han creado nuevas necesidades para las que no estaba previsto inicialmente. El nuevo compilador de esqueletos de SPIP 1.8, SPIP 1.8.1 había aumentado su expresividad, dando lugar a muchas contribuciones que permitieron la presentación de cualquier tipo de información inesperada: catálogos, información geográfica, una serie de eventos tipo agenda... SPIP 1.9 introdujo diversos métodos de extensiones, sobrecarga de funciones, y puntos de entrada, posibilitando los plugins. El éxito de los sitios de contribuciones para SPIP estalló, y varios colaboradores reforzaron el trabajo de los desarrolladores. Sin embargo, sólo los programadores tuvieron acceso a estos nuevos acontecimientos cuya interfaz de programación debía ganar madurez.

La rama 2 de SPIP se mantiene como un sistema de publicación integrada (compatible con versiones anteriores), pero es al mismo tiempo una plataforma de desarrollo multi-servidores SQL que pretende ir más lejos. La plataforma ofrece dos niveles de especialización, con la intención de mantener la suavidad de la curva de aprendizaje mientras el número de funcionalidades se incrementa.

  • El primer nivel, ya presente en versiones anteriores de SPIP, es para aquellos que quieren innovar gráficamente sin tener que programar en

SQL, PHP y JavaScript. Saber HTML y CSS es suficiente para aprender el sistema de esqueletos de SPIP, y alcanza para disponer de la información administrada en la base de datos.

  • El segundo nivel está diseñado para programadores que pueden escribir extensiones portables en diferentes servidores SQL, utilizando una interfaz de programación basada en un servidor virtual SQL. Esta interfaz puede ser utilizada independientemente de la base de datos instalada por SPIP.

Dada la abundancia de novedades, la descripción de esta nueva versión se articula en tres temas, a veces remitiendo a artículos más exhaustivos :

-  SPIP y la publicación web,

  • URLs simbólicas posibilitan la gestión de su historial y permiten la estructura de en forma de árbol;
  • incrustación de diversos recursos multimedia dentro de los textos;
  • los foros permiten la inclusión de documentos;
  • numerosas funcionalidades nuevas en torno a las peticiones;
  • gestión de ediciones concurrentes;
  • instalación automática de plugins;
  • acceso simultáneo a múltiples servidores (MySQL, PostGres, SQLite2 y 3), fusión de los respaldos de datos, esqueletos automáticos;
  • mutualización simplificada notablemente, útil para los servidores de hosting;

-  SPIP y el diseño web

  • los esqueletos /dist se basan en la estructura CSS LayoutGala
  • nuevos filtros;
  • nuevos modos de inclusión, incluyendo formularios en AJAX;
  • novedades dentro de las balizas, incluyendo la URL y la clave principal.
  • nuevos criterios, en particular para composiciones (joins) y en el motor de búsqueda
  • gestión automática de cadenas a traducir.
  • validador XML integrado y aplicable a un conjunto de páginas.

-  SPIP y la programación web

  • servidor SQL virtual apoyado directamente en las capas bajas de PHP
  • nuevos pipeline;
  • declaración de biblioteca externas.

Hay que señalar que a partir de esta nueva versión SPIP se distribuye bajo la licencia GNU/GPL versión 3. Esta licencia, que sucede a la licencia

GNU/GPLv2 creada 15 años atrás, tiene en cuenta los derechos de autor de otros paises además de los Estados Unidos, y contempla la evolución extraordinaria que ha experimentado el Software Libre.

Las explicaciones completas y argumentos de la Free Software Foundation y Richard Stallman se encuentran aquí:

— la licencia

— traducción al español (no oficial)

— Por qué actualizar a la versión GPLv3

Como siempre, gracias a quienes han contribuido de una manera u otra a esta nueva versión. Gracias en primer lugar a las traductoras y traductores, especialmente a quienes recién llegaron y permiten que SPIP esté disponible en asturiano, indonesio, birmano, camboyano y sueco.

Gracias a quienes han seguido el desarrollo de la versión día a día , gracias por la paciencia con la velocidad del trabajo ejecutado, muchas gracias por su confianza a pesar de las dificultades que nos encontramos en el camino.

SPIP y la publicación Web

SPIP es un sistema para crear y administrar sitios Web con una interfaz inspirada en las estructuras del mundo editorial, es decir, sostenible y escalable [1].

Después de instalarlo tras sólo 5 pasos a través de su navegador, SPIP está inmediatamente listo para usar, y permite disfrutar de la mejor tecnología del momento, sea sólo uno o una, o un equipo completo de editores y editoras.

Con SPIP 2.0, la interfaz y la ergonomía se han mejorado, los estándares XHTML y CSS se han respetado aún más, las interacciones con el sistema se han acelerado, en particular mediante el uso sistemático de AJAX [2]. La incorporación de documentos de diversos tipos se ha unificado, permitiendo su uso diversificado.

Esta "suavización" progresiva significa que los nuevos usuarios disfrutaran de una interfaz muy cuidada, y los que ya tiene experiencia podrán seguir con sus (buenas) costumbres.

-  Juego de URLs simbólicas

El nuevo sistema de URLs permite que varias direcciones se asocien al mismo objeto, lo que implica, por ejemplo, que se podrá cambiar el título creando una nueva URL pero sin invalidar la anterior. Además, un cliente HTTP que solicite una versión antigua de la URL será redirigido a la más actual automáticamente.

Estas URLs se gestionan ahora en una tabla SQL separada de la de la clave principal, lo que acelera su utilización en sitios grandes. Por supuesto, la compatibilidad con las URL de versiones anteriores de SPIP está asegurada con la actualización del sitio.

Estas nuevas URLs están finalizando la labor pionera realizada por el compañero Toggg (http://toggg.com/spip/spip.php?article19 y http://toggg.info/spip.php?article18) a la memoria de quien esta nueva versión de SPIP está dedicada

Un nuevo juego de URL, llamado arbo, se ha agregado para ofrecer una notación en forma de arbol, del tipo

http://www.misitio.com/sector/seccion1/seccion2/articulo

Por último, un simple clic en una tabla mostrado en las páginas de administración del sitio permite elegir el tipo de URLs.

El antiguo método de la variable PHP global $type_urls todavía funciona, pero se aconseja quitar esa definición del archivo mes_fonctions.php de manera que prevalezca la configuración desde el administrador. Si tienes un juego de estructuras URL propio dentro de un subdirectorio urls de tu

SPIP_PATH, este aparecerá automáticamente en la tabla .

-  Incrustación de diversos objetos multimedia dentro del texto

Los modelos img y emb que permiten incrustar un documento dentro del cuerpo de un texto han sido completamente rediseñados.

Ahora se basan en la nomenclatura oficial de tipos MIME, usando filtros homónimos para cada uno. Esta arquitectura permite gestionar muy bien la incrustación de documentos de cualquier tipo : esto se describe en el artículo article 3844 que completa al artículo Utilizar modelos escrito cuando SPIP 1.9.1 salió.

De esta manera, los redactores pueden incrustar un número mucho mayor de tipos de documento de los que existian en versiones previas.

Por ejemplo, SPIP mostrará automaticamente el código HTML de una tabla para un fichero CSV de datos. Del mismo modo, un archivo txt será incustado entre etiquetas pre de manera que el texto se visualice sin modificar su formato. Por último, para

un documento HTML, sus hojas de estilo se importan automáticamente, lo que permite convertir fácilmente un sitio web estático en un sitio SPIP.

-  Adjuntar documentos en los foros

Una nueva opción permite autorizar a los visitantes a adjuntar documentos en el foro. Obviamente, esta opción no está activada por omisión.

La configuración permite definir qué extensiones de archivos son aceptadas, por ejemplo " gif, png, jpg, mp3 ". El * indica que cualquier tipo de documento es aceptado, excepto aquellos que pueden afectar la seguridad.

-  Muchas características nuevas en las peticiones

Muchas novedades se describen en Peticiones con SPIP: búsqueda y selección de múltiples firmantes, paginación, canales RSS, estadísticas diarias y mensuales, interfaz por tabla, y peticiones multilingües.

-  Gestión de ediciones concurrentes

El espacio privado de SPIP gestiona los conflictos de concurrencia en la publicación de artículos, secciones, breves, palabras clave, autores y sitios.

El escenario es el siguiente: supongamos que Natalia y Juan han abierto simultáneamente la edición del mismo artículo y, luego de modificar el texto, cada uno guarda su nueva versión, en primer lugar Natalia y luego Juan.

Las situaciones son diversas:

  • Natalia modifica el título, Juan el texto: se aceptan las dos modificaciones, el título de la versión de Juan (sin cambios respecto a la versión original) no se guardará, prevaleciendo el que escribió Natalia.
  • Natalia cambia el título, Juan también
    • si es el mismo título: no hay problema;
    • si los títulos difieren: se le avisa a Juan, mostrándole el título que acaba de enviar, el que está almacenado en la base de datos, la diferencia entre los dos, y un formulario para copiar y pegar las modificaciones. El título enviado no ha sido almacenado en la base.

Estos elementos son tratados a cada campo independiente: si hay un conflicto en el título pero no en el epígrafe, este se guarda, y el mensaje de error sólo se refiere al título.

-  Facilitar el uso de plugins

— Instalación automática y/o manual

Los plugins se siguen instalando dentro de la carpeta /plugins. Pero además, al crear una subcarpeta /plugins/auto se activa la interfaz de instalación automática de plugins.

A través de la instalación automática es posible instalar:

  • un plugin individual, indicando la URL a un archivo Zip,
  • una lista de plugins definidas en un canal RSS.

— Búsqueda de plugins

Tres sitios permiten a los usuarios buscar plugins según diferentes orientaciones (desarrollos, contribuciones, reseñas):

  • SPIP-Contrib evolucionó para facilitar la búsqueda de plugins;
  • Lanzado en ocasión esta nueva versión de SPIP, el sitio ((Plugins.spip)) ofrece una clasificación más fina, ordenada por tema, por compatibilidad con distintas versiones de SPIP, por idioma, etc...

Los sitios Plugins.spip y SPIP-contrib poseen canales RSS directamente utilizables por la instalación automática, reuniendo los plugins compatibles con SPIP-2.0

-  Acceso a múltiples bases de datos y servidores, fusión parcial y esqueletos automáticos

SPIP ahora funciona no sólo con un servidor MySQL, sino también con un servidor PostgreSQL y con SQLite 2 y 3 a través de las extensiones de PHP. La elección se propone al comienzo de la instalación y, a continuación, se almacena en el archivo de conexión. Ten en cuenta que el formato de copias de respaldo es común a todas las versiones, por lo que es posible optar por otro motor de base de datos y restaurar el respaldo luego de una reinstalación de SPIP.

Esta nueva portabilidad de SPIP ha contribuido a estabilizar una funcionalidad que no estaba presente hasta ahora: la utilización de varias bases de datos SQL en un mismo esqueleto.

Un formulario comparable a la instalación, accesible desde el menú mantenimiento del sitio,

permite declarar otra base, y produce un archivo de conexión similar al del sitio principal, suficiente para utilizar esta base de datos. En el caso de una base creada por otro sitio SPIP, esta declaración puede ser reducida a una mera copia de su archivo de conexión.

Esta declaración permite que los esqueletos invoquen datos de tablas pertenecientes a otros sitios, simplemente añadiendo en la URL un parámetro adicional, connect, cuyo valor será el nombre del archivo de conexión (sin la extensión .php). También puedes mezclar bucles asociados a bases diferentes, pasando de una conexión a otra cuando sea necesario. Ten en cuenta que estas bases pueden estar siendo utilizadas por otras implementaciones de SQL, y que SPIP juugue el rol de agregador de extractos de varias bases.

Para permitir explorar rápidamente las tablas de una base, un mecanismo para la creación automática de un esqueleto se activa cuando el valor del parámetro URL page tiene la forma table:nombre_tabla.

Este truco muestra el contenido de la tabla permitiendo ordenar por campo, y filtrando por valor.

Con esta funcionalidad sería fácil desarrollar un utilitario de gestión de bases de datos sobre SPIP, con la potencialidad de ser multiservidor.

Por razones de confidencialidad, este mecanismo sólo está accesible al webmaster o webmistress principal del sitio, pero podría ampliarse este permiso sobrecargando la función autoriser_webmestre.

Otra funcionalidad estable es la exortación multi-servidor:

se puede respaldar una parte de la base, y luego fusionar estos datos con la base de otro sitio.

Una presenación sintética de las funcionalidades sobre las bases SQL está descript en el artículo article 3846. En particular, allí se propone una nomenclatura para los archivos de conexión de modo que todos los sitios instalados puedan conectarse mutuamente sin ninguna declaración extra.

-  Mutualización del código fuente

La mutualización del núcleo, propuesta con SPIP 1.9, se aplica a la actual con la salvedad de que se awplica a cualquier directorio con datos SPIP. Es decir que la limitación para compartir el directorio IMG se ha eliminado.

La mutualización se recomienda a aquellos webmasters o webmistress que administan varios sitios, de manera de facilitar las cuestiones de mantenimientos. Más aún, se asegurarán el máximo confort si quieren utilizar múltiples bases de datos, como se describe en otra parte de este artículo.

Aprovechamos para hacer un llamamiento a todos los servicios de hosting para que investiguen esta característica, ya que puede reducir significativamente el espacio en disco y reducir la carga de múltiples copias de SPIP que pueden existir en sus servidores. Fueron desarrolladas varias extensiones que realizan automáticamente las tareas de configuración; véase el SPIP-Contrib. De esta manera, SPIP actúa como una granja de blogs o un servidor de CMS.

SPIP y el diseño web

-  Esqueletos basados en el CSS LayoutGala

SPIP proporciona esqueletos estándares estructurados que utilizan los métodos modernos y herramientas destinadas a los webmasters (el lenguaje de bucles, etiquetas y criterios y filtros) que permiten personalizar progresivamente tu sitio superando la utilización de esqueletos «llave en mano».

Los esqueletos entregados junto al núcleo de Spip, la «dist», se basan a partir de ahora en la estructura HTML «Layout Gala», que permite modificar la disposición de diferentes bloques con sólo modificar algunas líneas de CSS:

<div id="page">

	<div id="entete">Encabezado</div>

	<div id="conteneur">

		<div id="contenu">Contenido</div>

	</div>

	<div id="navigation">Navegación</div>

	<div id="extra">Extra</div>

	<div id="pied">Pié de página</div>

</div>

El código HTML de esqueletos integra por defecto los Microformatos.

Los esqueletos respetan el XHTML 1.0 strict, al igual que los scripts de espacio privado. No obstante, el DOCTYPE declarado es XHTML transitionnal, con el fin de no obligar a los redactores a aprender una norma difícil y bastante criticable (ver el primer párrafo del artículo El validador XML integrado).

La gestión de recursos ha evolucionado y nuevas variables pueden personalizarse.

(Cf. : http://archives.rezo.net/spip-core....)

-  Personalización de las balizas insertadas por SPIP para cursiva y negrita:


$debut_italique = '<i>' ;

$fin_italique = '</i>'  ;

$debut_gras = '<strong>' ;

$fin_gras = </strong>' ;

-  Párrafos :

desde ahora, todos los textos son divididos de manera idéntica y coherente. Si queremos encontrar el funcionamiento anterior, se deberá configurar la variable de personanlización $toujours_paragrapher a false:

$GLOBALS['toujours_paragrapher'] = false;

-  Supresión de class="spip" en las etiquetas p, i, strong y li La variable de personalización para volverlos a poner es (atención, notar el espacio inicial):

$class_spip = ' class="spip"';

Hay que remarcar que, en las notas, <p class="spip_note"> se conserva si <p class="spip"> se conserva (por compatibilidad ascendente), sino también desaparece.

Se puede intervenir más finamente, por ejemplo, para sacar el class = "spip" de los párrafos pero no de las cursivas:


$class_spip = '';

$debut_italique = '<i class="spip">';

$debut_gras = '<strong class="spip">';

Además, si queremos realmente sacar el class = "spip" de las otras etiquetas (ul, ol, tablas, hr, h3 y blockquote), se puede hacer:

$class_spip_plus = '';

-  Poesía :El código creado por la etiqueta SPIP <poesie> devuelve ahora:

<blockquote class="spip_poesie">

-  Fecha de primera publicación: señalamos aquí otra variable de personalización, aunque ella no hace referencia a los estilos.

Por defecto, el año de la fecha de publicación queda libre. Para forzar la publicación de un menú desplegable a partir de un cierto año (como para la fecha de publicación en línea), se puede personalizar la variable $debut_date_publication, por ejemplo:

$debut_date_publication = 1997;

-  Novedades en los filtros

— image_typo funciona (de manera experimental) con el árabe (y evidentemente el hebrero) La presencia de caracteres árabes y hebreos se detecta automáticamente, activando un conjunto de automatismos destinados a invertir el orden de las letras (de derecha a izquierda) y gestionar el complejo sistema de uniones de estas escrituras.

— Aparecen tres filtros nuevos de manipulación de los colores: : couleur_saturation, couleur_web y couleur_4096.

El filtro couleur_saturation admite un valor entre 0 y 1 indicando la saturación del color:

  • 0: blanco
  • 1: color completamente saturado (atención, el color totalmente saturado no es el negro)

Este filtro es muy práctico para fabricar una gama de colores, donde las funciones couleur_eclaircir y couleur_foncer, no tienen precisión y, sobre todo, debilitan los colores (no actuando sobre la saturación sino con la luminosidad).

El filtro couleur_web devuelve un redondeo del color en una gama de 256 colores. El objetivo real no es realizar una publicación para pantalla de 256 colores (¿existen todavía pantallas de estas?), sino más bien limitar el número de colores posibles aplicados a un filtro gráfico (por ejemplo, colorear una imagen tipográfica o cambiar una hoja de estilo) y evitar de esta forma obtener potencialmente 16 millones de variantes de este archivo.

El filtro couleur_4096 devuelve un redondeo del color en una gama de 4096 colores.

— Finalmente, el filtro couleur_extreme admite ahora una variable opcional, entre 0 y 1 (por defecto: 0,5), para regular el umbral de luminosidad a partir de lo que se balancea hacia el negro o el blanco.

De paso, las funciones de conversión entre RGB, HSL y HSV se han integrado a las fuentes (para el uso interno de funciones de manipulación de colores). El paso a HSL es más utilizado a partir de ahora dentro de couleur_extreme, lo que hace que el balanceo negro-blanco se haga sobre una base «visual», y no sólo sobre la media de las componentes.

— El filtro gráfico image_aplatir acepta a partir de ahora un cuarto parámetro, permitiendo conservar la transparencia (sobre todo para la conversión a formato GIF).

-  El nuevo filtro gráfico image_format permite forzar el paso de un formato a otro, conservando la transparencia en el caso de PNG y GIF. Se trata de un atajo (simplificación, por tanto) de la función image_aplatir

Atención, en el caso de una conversión de PNG con transparencia hacia GIF, esta función no permite escoger el color hacia el que se realiza la transformación de los puntos semitransparentes; en esta situación,deberás utilizar el filtro image_aplatir.

— Los filtros de tratamiento de imagen han sido enriquecidos con un mecanismo automático de recolección y limpieza de las imágenes temporales. Así, a lo largo de la sucesión de varios filtros aplicados sobre una misma expresión, sólo se conserva la imagen final, lo que permite reducir el espacio de disco utilizado.

— El nuevo filtro compacte_head compacta los diferentes archivos JavaScript y CSS llamados desde un esqueleto, en dos archivos únicos de tamaño reducido, lo que permite acelerar la carga de las páginas visitadas (de esta manera no se llaman varios archivos JavaScript sino sólo uno que es más liviano) Si se utiliza (como es el caso del esqueleto de la dist desde una inclusión inc-head.html que reúna las llamadas JavaScript y CSS, esta función se activará automáticamente gracias a la regulación en la página de configuración de SPIP.

-  Nuevos modos de inclusiones, sobre todo basados en AJAX

La baliza #INCLURE interpreta el argumento {env} como la transmisión de todo el etorno del esqueleto invocador. Esta notación funciona también con <INCLURE ...>. Si otros argumentos están presentes en la llamada, los valores indicados por sus variables serán prioritarios sobre el entorno incluído:


 <INCLURE{fond=gribouille/rubrique}{env}{lang=en}>

incluirá gribouille/rubrique pasando el id_rubrique y debut_pages del contexto incluído (de la URL, dicho de otra manera), pero forzando la lengua inglesa aunque la URL defina un idioma específico, ?lang= XX.

El argumento {ajax} añadido una baliza #INCLURE o <INCLURE ...> permite ajaxificar automáticamente todos los enlaces de clase "ajax" y todos los enlaces contenidos en una clase "pagination". Para más detalles, dirigirse a `ajax` pour les `inclure`

Señalamos que la baliza INCLURE ahora admite una barra final opcional, con el fin de ajustarse más a una sintáxis XML.

Otra caso de inclusión son las baizas llamadas dinámicas, cuyos nombres comienzan por #FORMULAIRE_, ya que producen formularios.

Estos formularios del espacio público, y también de una parte del espacio privado, se han reescrito con la ayuda de un nuevo método, CVT (cargar, verificar, tratar). Permite crear nuevos formularios escribiendo sólo esqueletos, dejando que SPIP se encargue de reportar los formularios mal rellenados, o bien registrando los datos en la base.

Así,

prive/contenu/ contiene los esqueletos de interpretación de los objetos editoriales, y prive/editer/ los esqueletos de edición correspondientes, que realizan llamadas a la serie de #FORMULAIRE_EDITER_... ubicados dentro de prive/formulaires.

Es posible personalizar estas páginas en función de los números de sección con un -xx.html como con cualquier otro esqueleto.

Estas nuevas posibilidades se encuentran detalladas en Formulaires CVT par l’exemple y Les formulaires CVT de SPIP.

-  Novedades en las balizas

— Las balizas que empiezan por URL_ son tratadas genéricamente, lo que generaliza aquellas disponibles anteriormente.

Si la etiqueta no tiene argumento, como en URL_ type, el compilador de SPIP produce una llamada a la función generer_url_entite aplicado a $id_type (que debe ser definido en el contexto), y sobre type De esta manera se tratan las habituales URL_ARTICLE, URL_RUBRIQUE, etc, otrora basadas en en las funciones generer_url_article, generer_url_rubrique, etc. que ahora estan obsoletas ya que carecen de generalidad.

Si la baliza tiene un argumento, es sobre este y no sobre sobre $id_type que se aplicará generer_url_entite. Toda esta familia de balizas tiene en cuenta un eventual acceso a varias bases SPIP (ver más arriba).

Esta funcionalidad de navegación a distancia permite, en particular, probar un nuevo juego de esqueletos en un sitio en producción sin modificar su instalación .

— La baliza #EXPOSE (ver Resaltar un artículo de una lista) amplía su modo de aplicación. Toma la clave primaria del bucle inmediatamente superior (o de aquellas explícitamente designada si se utiliza la sintaxis #nom:EXPOSE ahora autorizada aquí) y compara su valor actual en cada iteración con el valor del parámetro homónimo de la URL de llamada. Entonces muestra su primer argumento si estos dos valores son iguales, sino el segundo. Esta comparación se extiende a la jerarquía de la clave considerada, es decir que en un bucle RUBRIQUES (secciones) se comparará la clave primaria de este bucle con el número de sección del artículo considerado, y en un bucle GROUPES_MOTS, se comparará su clave primaria con el número de la palabra clave en cuestión.

— Una nueva baliza, #FILTRE insertada en un esqueleto permite aplicar un filtro a la totalidad de la página generada. De este modo, insertando el siguiente código en un esqueleto::

#FILTRE{compacte_head}

Todo el resultado de la página será "filtrador por compacte_head.

— Para modificar los puntos de continuación de la baliza

#INTRODUCTION, desde ahora se puede hacer simplemente desde mes_fonctions.php (o mes_options): :


define('_INTRODUCTION_SUITE', '&nbsp;(...)');

o


define('_INTRODUCTION_SUITE', '');

— Llamado implícitamente por esta etiqueta, el filtro couper puede ser llamado independientemente y acepta un parámetro suplementario que indica qué cadena de caracteres será insertada al final del texto cortado:

[(#TITRE|couper{10,'...'})]

— Una nueva baliza, #SESSION, permite acceder a las informaciones asociadas al internauta identificado (id_auteur, y otras informaciones de su perfil) y diferenciar automáticamente la caché en función del visitante.

-  Novedades en los criterios

A partir de esta versión se puede realizar una compisición (join) entre dos tablas SQL escribiendo directamente la notación TABLA.ATRIBUTO en un criterio La composición será posible si la tabla indicada tiene un campo homónimo de un campo de la tabla principal del bucle, siendo la clave primaria prioritaria. En caso de criterio sin operador explícito {TABLA.ATRIBUTO}, el valor implícito tomado es el valor del ATRIBUTO en el contexto actual (en particular, en primer nivel, la URL) Aquí, por ejemplo, un bucle que buscas las firmas de peticiones asociadas a las traducciones de un artículo dado en contexto:


<BOUCLE_signatures(SIGNATURES){articles.id_trad}  />

La tabla SQL signatures tiene en común con la tabla articles el campo id_article; dado el valor de un campo id_trad por URL provocará la selección dentro de la tabla signatures de todas aquellas filas asociadas a un artículo que tenga este valor de id_trad dentro de la tabla articles.

Esta funcionalidad también está disponible con criterios condionales. He aquí, por ejemplo, un bucle que lista las firmas ya sean de una petición de un artículo dado (id_article presente en el contexto), o bien peticiones asociadas a las traducciones de un mismo artículo (si es id_trad el que está presente)


<BOUCLE_signatures(SIGNATURES){id_article?} {articles.id_trad ?}  />

Esta nueva funcionalidad vuelve obsoletos ciertos criterios (como titre_mot por ejemplo), pero se conservan por obligaciones de compatibilidad.

Otro cambio importante en los criterios se refiere a la búsqueda.

Antes, SPIP se servía de una tabla SQL suplementaria para efectuar la indexación de elementos del sitio desde su creación. Los operadores de búsqueda de los servidores SQL actuales son suficientemente rápidos para evitar este costoso tratamiento previo sobre el sitio, y por lo tanto, el criterio recherche ahora se basa directamente sobre ellos. Admite, además, en el presente un argumento opcional que indica la cadena a buscar. Si no está, es siempre la variable de URL recherche la que se usa. Quiere decir que hay equivalencia entre

<BOUCLE_t(ARTICLES){recherche}> y

<BOUCLE_t(ARTICLES){recherche #ENV{recherche}}>.

El interés de esta extensión es múltiple:

  • buscar una cadena dada por el contexto interno al esqueleto

<BOUCLE_m(MOTS){id_mot}>

 <BOUCLE_r(ARTICLES){recherche #TITRE}>...

  </BOUCLE_r>

</BOUCLE_m>

  • transmitir la cadena a buscar a un esqueleto incluído, como
<INCLURE{fond=x}{recherche=NNN}>
  • utilización en un modelo para seleccionar objetos que en sus campos contienen la cadena, como
<modelo1|recherche=spip>

En el caso de un uso condicional de este criterio, se procurará evitar espacios entre el signo de interrogación y el valor indicado:

{recherche ?#ENV{rech}}

y no

{recherche ?}

excepto si se quiere, efectivamente, un espacio antes de la cadena búsqueda.

-  Con Salvatore, my plugin spricht разных språk

Salvatore es feo, rústico, jorobado, un poco loco, y habla todas las lenguas (sí, veamos!!).

Salvatore es nuestra nueva herramienta que permite desarrollar un plugin multilingüe, sincronizando automáticamente su archivo de lengua en SPIP-Zone con el espacio de traducción (que reúne a las y los traductores de SPIP). Consultar y participar en su documentación.

-  Validación XML

El validador integrado se enriquece de una nueva funcionalidad: si su argumento es un directorio, y no una URL, se aplica sobre todos los archivos de este directorio cuya extensión sea igual al valor del parámetro de URL ext. En su ausencia, se toma la extensión .php, y si no existen archivos .php, tiene en cuenta todos los archivos .html, interpretados como esqueletos. Los argumentos esperados por estos esqueletos se generan automáticamente, después de analizar su contenido. Este análisis no es posible para los scripts, ya que PHP está tipado dinámicamente, pero la arquitectura general de SPIP, sobre todo gracias a la abolición del uso de la instrucción exit, permite al validador realizar pruebas muy informativas.

La influencia de XML sobre SPIP se hace sentir también en una pequeña innovación sintáctica: los bucles sin cuerpo disponen ahora de una notación abreviada, inspirada en la notación XML.

Por ejemplo, el bucle siguiente:


<BOUCLE_mensajes(FORUMS){id_article}>

</BOUCLE_mensajes>

#TOTAL_BOUCLE mensajes

</B_mensajes>

puede ser reescrito:


<BOUCLE_mensajes(FORUMS){id_article} />

#TOTAL_BOUCLE mensajes

<//B_mensajes>

SPIP y el desarrollo Web

Esta sección describe las herramientas de desarrollo utilizadas por el equipo de SPIP, herramientas que los desarrolladores deben dominar para proporcionar extensiones portables.

Muchos sitios Web, por la interacción que proponen con los visitantes, son en sí mismos aplicaciones en línea. Numerosos desarrollos de la rama 2 están destinados a abordar la creación de sitios Web 2.0: gestión de sesiones de usuarios, colaboraciones sobre el sitio público, mejor gestión de eventos fechados ...

-  El servidor SQL virtual

La nueva versión de SPIP ha necesitado un largo trabajo de reescritura de las peticiones SQL para volverlas portables.

Estas transformaciones reposan sobre una interfaz de programación que está pensada para que una extensión de SPIP sea portable por sí misma.

Proporciona también una gestión de los problemas de seguridad del tipo ataque por inyección de código.

Esta interfaz no se apoya sobre bibliotecas previamente existentes, ya que su nivel de abstracción era insuficiente para resolver todos los problemas planteados. En cambio, se basan sobre una treintena de funciones virtuales deducidas por abstracción del código anterior de SPIP. Su generalidad le permite incluso servir para la integración de bases SQL heterogéneas, independientemente de otros servicios gestionados por SPIP.

La interfaz incluye un gestor de sus propias versiones, que permitirá ejecutar simultáneamente extensiones de SPIP utilizando diferentes versiones de esta interfaz en caso de que esta tuviera que evolucionar

Esta reescritura completa se aprovecha igualmente de MySQL, ya que las construcciones SQL más costosas han sido eliminadas. Así la coherencia de la base se asegura progresivamente y no por una limpieza completa pero esporádica. El cierre global del servidor ha sido sistemáticamente sustituido por restricciones SQL (constraints) que rechazan automáticamente una escritura concurrente a la que haya en curso.

Algunos índices se han redefinidos para mejorar su eficacia.

Finalmente, el compilador analiza más finamente la necesidad de composiciones, siendo el código SQL producido mucho más cercano a lo que es óptimo en este punto.

Estas mejoras son visibles sobre todo con la ayuda de un profiler SQL disponible actualmente en entre las herramientas que SPIP ofrece.

El proceso de actualización también se ha reescrito y repensado totalmente. Administra actualmente sin fallar bases de volumenes importante , las cuales exigían herramientas específicas del servidor SQL.

Estos nuevos aspectos de SPIP son descriptos en un artículos específico :L’interface de SPIP avec SQL.

-  Nuevos puntos de entrada (pipelines), llamados mucho más ampliamente

El número de puntos de entrada (pipelines) se enriquece a unos 50, y también su número de llamadas con más de 180 puntos de entrada.

En particular:

  • los pipelines pre_edition y post_edition se llaman sistemáticamente antes y después de la grabación en la base de datos de un objeto editorial, ya sea durante la creación, la modfiicación o el cambio de estado;
  • el pipeline recuperer_fond permite actuar sobre el resultado de todo el esqueleto incluído en el momento de su evaluación;
  • los pipeline pre_boucle y post_boucle permiten modifcar el comportamiento de un bucle sin sobrecarga.

Esta extensión de los pipeline permite a los plugins actuar aún más sobre el comportamiento de SPIP siempre con menos riesgo de incompatiblitat entre ellos.

-  Bibliotecas externas

SPIP hace como phpMyAdmin para conectarse a mysql: si la extensión no se ha cargado, utiliza un cargamento dinámico dl('mysql.so'), después de haber verificado cuidadosamente que está autorizado. Esto permite instalarlo en servidores configurados de esta manera (Ubuntu, por ejemplo).

Una función SPIP permite solicitar una carga dinámica: : charger_php_extension('mysql').

¡A ustedes les toca jugar!

Estas evoluciones de SPIP permiten desarrollar, además de sitios de internet comunes, aplicaciones tipo intranet y cualquier otro tipo de aplicaciones en línea, mezclando sesiones de usuarios, AJAX, páginas personalizadas o interfaces interactivas evolucionadas.

Notas

[1Elaborar y mantener la estructura editorial de un sitio enriqueciéndolo regularmente no es algo evidente, ya que requiere cierta experiencia. Una estructura editorial mal concebida puede descalificar a un sitio, ya que las actualizaciones se vuelven cada vez más difíciles. La lógica de publicación de SPIP tiende a inducir esas estructuras editoriales para un sitio bien organizado, incluso con decenas de miles de artículos.

[2AJAX es un conjunto de funciones javascript para manipular la estructura de una página HTML, cargar los elementos de la página individualmente y crear fácilmente efectos visuales

Traducido por Martín Gaitán para la comunidad de usuarios y usuarias de SPIP en Español.

Autor o autora tin Publicado el: Actualizado: 23/08/23

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