SPIP 4.0

Memoria de cambios realizados por SPIP 4.0

Interfase

Área privada renovada

Se ha iniciado una gran cantidad de trabajo ergonómico para eventualmente hacer que el espacio privado se adapte a todos los tamaños de pantalla para facilitar su uso.

El área privada se adapta mejor al ancho de la pantalla, y comienza a utilizar diferentes variables CSS para facilitar el mantenimiento.

Aperçu de l’espace privé de SPIP 4.0
L’espace privé de SPIP  4.0 dans le site SPIP  Contrib.
Vue d’un article (avec la couleur grise)
Édition d’un article (avec la couleur grise)

Una elegante pantalla de inicio de sesión

La página de inicio de sesión predeterminada (login.html) está completamente rediseñada, con el color SPIP rosa en el fondo.

Écran de connexion par défaut à SPIP  4.0
L’écran de connexion sur le site SPIP.net.

Y si el rosa te sorprende, ¡que no cunda el pánico! Existe un nuevo formulario en la configuración de identidad del sitio. Te permite elegir el color que quieras. Y mejor: incluso te permite colocar una magnífica imagen de fondo.

Écran de connexion avec une image, dans SPIP  4.0

Iconographie en SVG

Gran parte de los iconos e ilustraciones del área privada de SPIP y sus complementos se han convertido a SVG.

  • Tickets #4468 et #4562 : Armonización, en el área privada, de botones HTML y CSS
  • Nuevo conjunto de iconos basado en el tema de Numix (en SVG) para los tipos de documentos en la biblioteca multimedia.

Documentos & Logos

Un amplio trabajo en los documentos y logotipos:

  • Los logotipos de los artículos y otros objetos editoriales se almacenan como documentos (en spip_documents en la base de datos, y en IMG / logo / en el disco manteniendo el nombre del archivo). Una fase de migración mueve los logotipos a su nueva ubicación en el disco.
  • Los logotipos, los documentos de imagen y los filtros de imagen aceptan y admiten el formato SVG.
  • El filtro balise_img le permite administrar archivos SVG y declarar su tamaño.
  • El nuevo filtro balise_svg le permite incrustar el código fuente de un archivo de imagen SVG en el código HTML directamente. Puede ser útil, por ejemplo, para iconos pequeños.
  • Los documentos / logotipos se pueden cargar arrastrando y soltando, sea cual sea su tamaño (integración del complemento BigUp en plugins-dist, mejorado para la ocasión). El tamaño máximo autorizado es configurable.
  • Los modelos de documentos (<docXX>, <imgXX>, ...) se han revisado y simplificado, ahora utilizan la etiqueta <figure>. Commit fa13018a. Atención: Los modelos doc.html, img.html et emb.html ya no se utilizan (y, por lo tanto, ya no se cargará estos archivos en complementos (plugins) o esqueletos). En cambio, se usará los modelos image.html, audio.html, video.html et file.html, correspondiente al tipo de documento. El modo de documento ya no se tiene en cuenta para el cálculo del modelo.
  • Posibilidad de rechazar los archivos HTML de los modelos de documento por tipo de archivo detallado (tipo mime): file_text_csv.html o principal: file_text.html ; o por extensión: video_mp4.html. En consecuencia, sus variantes personalizadas doc_ [variante].html correspondientes al acceso directo<docN|variante> dejará de funcionar y se rechazará: image_[variante].html, video_[variante].html, etc.
  • Escribir atajos de SPIP para modelos de documentos <docXX>, <imgXX> o <embXX> se vuelve equivalente. La escritura recomendada es <docXX> (donde XX es el número de documento).
  • La noción de cartera y modo de documento / imagen en los documentos desaparece.Commit 9cf774b9.
  • La constante _COMPORTEMENT_HISTORIQUE_PORTFOLIO definida a true permite rehabilitar la antigua funcionalidad.

Compatibilidad PHP

Limitación de la compatibilidad de SPIP 4.0 con PHP de 7.3 a 8.0. También se han corregido muchos avisos, deprecaciones. Ten en cuenta que SPIP 3.2 será, por tanto, la última versión de SPIP compatible con PHP 5.

Base de datos

SPIP 4.0 funciona con Mysql o Sqlite. Puede actualizar una base de datos resultante de un SPIP> = 2.0.0.

Para una actualización de un SPIP anterior a 3.2, será necesario un paso previo de migración a SPIP 3.2.

Sintaxis de esqueleto extendido

Soporte agregado para bucles anónimos: <BOUCLE(ARTICLES)>

¿Cansado de archivar? ¡un bucle anónimo no necesita especificar su nombre!
Se le asignará automáticamente un identificador de forma interna.

[(#REM) Un bucle con nombre]
<B_mon_nom>
    <ul>
<BOUCLE_mon_nom(ARTICLES){id_article}{0,5}>
    <li>#TITRE</li>
</BOUCLE_mon_nom>
    </ul>
</B_mon_nom>
[(#REM) Un bucle anónimo]
<B>
    <ul>
<BOUCLE(ARTICLES){id_article}{0,5}>
    <li>#TITRE</li>
</BOUCLE>
    </ul>
</B>

Y si eres ambicioso, puedes poner tantos bucles como quieras en un esqueleto, ¡e incluso anidarlos! Pero bueno, piensa en tus sucesores para no hacer que el código sea demasiado anónimo y luego no se pueda encontrar su camino :)

<B>
    <ul class="rubriques">
<BOUCLE(RUBRIQUES){racine}{par num titre, titre}>
    <li>
        <h3>#TITRE</h3>
        <B>
            <ul class="articles">
        <BOUCLE(ARTICLES){id_rubrique}{!par date}{0,5}>
            <li><a href="#URL_ARTICLE">#TITRE</a></li>
        </BOUCLE>
            </ul>
        </B>
    </li>
</BOUCLE>
    </ul>
</B>

Agregar partes incondicionales de bucles, antes <BB_boucle> y después </BB_boucle>

Se agrega a los bucles una sintaxis para las partes no condicionales: este contenido siempre se mostrará, ya sea que haya un resultado o no, mientras se permite el uso de las balisas propias del bucle.
(#TOTAL_BOUCLE, #TRI, etc).
Esta sintaxis es particularmente útil para matrices de elementos con ordenación y filtrado. Si el bucle no devuelve ningún elemento, aún queremos mostrar los filtros (para desmarcarlos / modificarlos).

[(#REM) Una parte no condicional antes / después del bucle. ]
<BB_non_conditionnel>
    [(#REM) esta parte se muestra incluso si el bucle no devuelve ningún artículo ]
    <h3>Les articles</h3>
    Nombre :  #TOTAL_BOUCLE<br>
<BOUCLE_non_conditionnel(ARTICLES){id_article?}{id_rubrique?}{!par date}{0,5}{', '}>
    <a href="#URL_ARTICLE">#TITRE</a>
</BOUCLE_non_conditionnel>
   [(#REM) esta parte se muestra incluso si el bucle no devuelve ningún artículo ]
   <nav class="pagination" role="navigation">#PAGINATION</nav>
</BB_non_conditionnel>

Esto completa las partes condicionales de los bucles frontales <B_boucle> y después </B_boucle> que se muestran solo si el bucle tiene al menos un resultado.

[(#REM) Una parte condicional antes / después del bucle ]
<B_conditionnel>
    [(#REM) esta parte solo se muestra si el bucle devuelve artículos]
    <h3>Les articles</h3>
    Nombre :  #TOTAL_BOUCLE<br>
<BOUCLE_conditionnel(ARTICLES){id_article}{id_article?}{id_rubrique?}{!par date}{0,5}{', '}>
    <a href="#URL_ARTICLE">#TITRE</a>
</BOUCLE_conditionnel>
    [(#REM) esta parte solo se muestra si el bucle devuelve artículos ]
    <nav class="pagination" role="navigation">#PAGINATION</nav>
</B_conditionnel>
    <h3>Aucun article</h3>
<//B_conditionnel>

La parte incondicional de los bucles se puede acoplar con la parte condicional: en este caso, enmarca la parte condicional.

[(#REM) Mezcla incondicional / condicional antes / después ]
<BB_mix>
<div class="articles">
   <h3>Les articles</h3>
<B_mix>
    <ul>
<BOUCLE_mix(ARTICLES){id_article}{id_article}{!par date}{0,5}{', '}>
    <li>#TITRE</li>
</BOUCLE_mix>
    </ul>
    <nav class="pagination" role="navigation">#PAGINATION</nav>
</B_mix>
</div>
</BB_mix>

Se agregó soporte para bucles en la parte condicional de las etiquetas (balisas).

Sí ! ¡Ahora podemos poner bucles en las etiquetas!
Si si ! En las partes condicionales de las etiquetas.

Algunos ejemplos:

[(#BALISE) <BOUCLE(ARTICLES) {0,1}>#TITRE</BOUCLE> ]

[<BOUCLE(ARTICLES) {0,1}>#TITRE</BOUCLE> (#BALISE)]

[(#ENV{documents}|oui)
<B_docs>
    <ul>
<BOUCLE_docs(DOCUMENTS){id_article}{par num titre, titre}{mode=document}>
    <li>
        <a href="#URL_DOCUMENT">
        [(#TITRE|sinon{Document n°#ID_DOCUMENT})] \(#EXTENSION\)
        </a>
    </li>
</BOUCLE_docs>
    <ul>
</B_docs>
]

Cambios y contribuciones para los esqueletos.

Las balisas #PAGINATION requieren un cambio en la sintaxis y los argumentos.

El cambio es 1) en la etiqueta englobante, que debe ser nav 2) en los argumentos.

1) La etiqueta englobante ahora debería ser <nav class="pagination">.

Hasta SPIP 3.2, escribimos, por ejemplo:

[<p class='pagination'>(#PAGINATION)</p>]

Con SPIP 4.0, ahora se debe usar:

[<nav class='pagination' role='navigation'>(#PAGINATION)</nav>]

2) Solo queda un modelo de paginación. Por lo tanto, las diferencias de representación de paginación se realizan pasándole argumentos.

  • afficher_lien_precedent=oui para mostrar el < a resultados anteriores
  • afficher_lien_suivant=oui para mostrar el > lo que conduce a los siguientes resultados
  • afficher_lien_tous=oui para mostrar un enlace que permite ver todos los resultados simultáneamente. En este caso, el texto del enlace es "" por defecto, pero es posible especificar otra etiqueta con el argumento label_tous. Ejemplo: label_tous=todos.
  • nombre_liens_max le permite definir el número máximo de enlaces de paginación que muestra el modelo. También podemos usar la constante _PAGINATION_NOMBRE_LIENS_MAX para espacio público o _PAGINATION_NOMBRE_LIENS_MAX_ECRIRE para espacio privado.

El primer argumento puede indicar qué tipo de paginación desea. También se puede indicar con un argumento.type_pagination.
Ejemplo: #PAGINATION{naturel} es equivalente a #PAGINATION{type_pagination=naturel}.

  • type_pagination=page para mostrar los números de página: 1, 2, 3, 4...
  • type_pagination=rang para mostrar los rangos: 0, 10, 20, 30...
  • type_pagination=naturel para mostrar las filas con 1 en lugar de 0: 1, 10, 20, 30...
  • type_pagination=resultats para mostrar las filas de 10 en 10 desde 1: 1, 11, 21, 31...
  • type_pagination=page_precedent_suivant es la combinación de una paginación de tipo page con enlaces anteriores y siguientes.

El uso de la etiqueta en el área privada se detecta automáticamente, por lo que no es necesario pasar el argumento type_pagination=prive. Sin embargo, estando asegurada la compatibilidad con la sintaxis antigua en este punto, se podrá conservar, en esqueletos antiguos, el argumento de la versión antigua de la siguiente manera:

[<nav class='pagination' role='navigation'>(#PAGINATION{prive})</nav>]

Criterio {id_?}

El criterio {id_?} permite realizar todas las conexiones posibles con variables de entorno. Por tanto, se comporta como otros criterios {id_xxx ?} que sea posible para el bucle dado.

Ver id_ ?

Función lister_champs_id_conditionnel y tubería exclure_id_conditionnel

El criterio {id_?} se basa directamente en la función lister_champs_id_conditionnel($table) que devuelve una lista de posibles campos de selección condicional para esta tabla.

El cálculo se realiza a partir de campos que comienzan con ’id_’ en la tabla, así como con un posible campo de ’objeto’. Luego, las tablas editoriales se completan con las claves primarias, que se pueden vincular fácilmente.

Finalmente, el resultado cruza la tubería exclure_id_conditionnel que le permite excluir ciertos campos de la lista calculada por la función lister_champs_id_conditionnel. Ver ejemplo en el complemento Breves o el complemento SVP.

Criterio {par_ordre_liste champ,#LISTE{...}}

Nuevo critère par_ordre_liste para ordenar un bucle en un orden específico.

Criterio {fusion_supprimer}

Este criterio entra en el Núcleo. Anteriormente se definía en el complemento SPIP-Bonux. Importante: Debe actualizar el complemento SPIP-Bonux, si está activo, a la versión> = 3.7.1 antes para actualizar el sitio a SPIP 4.0 para evitar un conflicto.

Filtro y función identifiant_slug

Ticket #4628 : agregar la función identifier_slug(). Permite transformar un texto claro en un nombre corto que se puede utilizar como identificador, clase, id, url ... manteniendo solo caracteres alfanuméricos y un separador.

Filtros label_nettoyer y label_ponctuer

Estos filtros se agregan para administrar y usar las cadenas de idioma históricas de SPIP un poco mejor (a veces con :, a veces sin).

  • label_nettoyer eliminar el : al final del texto
  • label_ponctuer agregar : al final del texto

Otros aspectos de los esqueletos

  • Nuevos argumentos de #FORMULAIRE_INSCRIPTION y #FORMULAIRE_LOGIN.
  • Nuevos filtros ajouter_class, supprimer_class y commuter_class
  • Filtro lien_ou_expose mejorado.
  • El filtro |singulier_ou_pluriel se puede ampliar para cada idioma creando su propio filtro singulier_ou_pluriel_<lang>, que se llamará si el idioma coincide.
  • Nuevo filtro appliquer_si_filtre en complemento de appliquer_filtre : el 1º devuelve el contenido inicial si el filtro buscado no existe, el 2º no devuelve nada.

Otras contribuciones

  • Integración de la librería Javascript Sortable.js para soportar arrastrar y soltar de una manera más fácil, en particular para ordenar los documentos, reemplazando el módulo de jQuery UI.
  • Una nueva caja modal ligera, accesible, receptiva y más bonita basada en Lity.
  • La hoja de estilo XSLT proporciona fuentes RSS elegantes.
  • El gráfico de estadísticas rediseñado (usa d3.js).
  • Le compagnon peut être ignoré pour chaque auteur qui connait déjà SPIP. El compañero se puede ignorar para cada autor que ya conoce SPIP.
  • Se elimina la opción "limitarse a HTML4" para el espacio público. Los esqueletos predeterminados (el dist) pasan en HTML 5 (plugin de rétro-compatibilité).
  • Se elimina el atributo de resumen de las tablas.
  • Encabezados de nivel h2 por defecto, y no más de nivel h3 como antes (plugin de rétro-compatibilité).
  • La función autoriser_exception() acepta un argumento * como una identificación : esto se permite para cualquier id. Cuando revierte una excepción con *, revierte todas las excepciones para ese objeto, incluso aquellas que se habrían establecido individualmente con identificadores.
  • El filtro heure_minutes acepta como argumento opcional abbr cuando no desee indicar la unidad de minutos. De este modo [(#DATE|heures_minutes{abbr})] mostrará, por ejemplo: 17h26
  • La constante _AUTO_SELECTION_RUBRIQUE, que asigna automáticamente una sección a la creación de un artículo si su valor es true ahora también acepta un entero: en este caso corresponde al identificador de sección que se asignará por defecto.
  • Si el tercer parámetro (clase) de #BOUTON_ACTION{etiqueta, URL, clase, mensaje de confirmación} contiene "ajax", esta clase se agrega al formulario que contiene el botón.

Correcciones

  • Actualización de todas las bibliotecas JS utilizadas
  • [login] Ticket #3957 : Ya no muestra el candado en la página de inicio de sesión, que es demasiado ambiguo, lo reemplaza con el candado https del navegador.
  • [admin] El enlace "Mostrar visitantes" no se muestra si no hay usuarios con este estado en el sitio.
  • [svp][plugins] Si hay un error XML en un paquete.xml, se explica directamente en la página de administración de complementos.

Limpiezas

Complementos (Plugins)

  • Los archivos plugin.xml de los plugins para SPIP 2.x ya no se interpretan. Ahora son solo paquet.xml. Por lo tanto, un plugin que solo tenga plugin.xml (sin paquet.xml al lado) ya no funcionará a partir de SPIP 4.0.

Otros

  • Ticket #4060 : Limpieza de código < PHP 5.4
  • Limpieza de código & CSS <= IE9
  • Limpieza de htaccess (ya no existirá compatibilidad con las URLs .php(3) de SPIP <= 1.8

Archivos

  • Supresión de inc/mail deprecado desde SPIP 2. Utilice por ejemplo:
$envoyer_mail = charger_fonction('envoyer_mail', 'inc');
$envoyer_mail(...);
  • Eliminación de action/preferer.php no utilizado desde SPIP 3.2 (supresión de ecrire/oo/).
  • Supresión de exec/valider_xml.php no funcional, movido al plugin para ser corregido Valider XML
  • Eliminación de exec/fond_monobloc.php. Crea los esqueletos del espacio privado en prive/squelettes.

Balisas / Filtros / Criterios

  • Eliminación de balisas #DEBUT_SURLIGNE y #FIN_SURLIGNE deprecadas desde SPIP 2. Uso de las clases CSS surlignable y pas_surlignable.
  • Los filtros aligner, aligner_gauche, aligner_droite, centrer, justifier y style_align fueron eliminados. Uso de código CSS para alcanzar el mismo resultado.
  • Supresión de #LOGIN_PRIVE. Uso de #FORMULAIRE_LOGIN
  • Supresión de #LOGIN_PUBLIC. Uso de #FORMULAIRE_LOGIN
  • Supresión de #DOSSIER_SQUELETTE. Uso de #CHEMIN
  • Supresión de #NOOP. Uso de #VAL
  • Supresión de {datasource ...}. Uso directo del criterio {source ...}

Funciones de PHP

  • Supresión de echo_log() (inútil ahora).
  • Uso de sql_fetch() en vez de spip_fetch_array().
  • Supresión de generer_url_retour(). Uso de parametre_url() en su lugar, con el parámetro ’redireccionar’.
  • Supresión de charger_php_extension() (Uso de extension_loaded()).
  • Supresión de revisions_articles(). Uso de article_modifier().
  • Supresión de revision_article(). Uso de article_modifier().
  • Supresión de articles_set(). Uso de article_modifier().
  • Supresión de insert_article(). Uso de article_inserer().
  • Supresión de instituer_article(). Uso de article_instituer().
  • Supresión de insert_auteur(). Uso de auteur_inserer().
  • Supresión de auteurs_set(). Uso de auteur_modifier().
  • Supresión de instituer_auteur(). Uso de auteur_instituer().
  • Supresión de revision_auteur(). Uso de auteur_modifier().
  • Supresión de insert_rubrique(). Uso de rubrique_inserer().
  • Supresión de revisions_rubriques(). Uso de rubrique_modifier().
  • Supresión de instituer_rubrique(). Uso de rubrique_instituer().
  • Supresión de admin_repair_plat(). Los archivos planos ya no serán utilizados. Esta función ya no es aplicable después de <code>r14292.
  • Supresión de version_svn_courante(). Uso de version_vcs_courante().
  • Supresión de lire_meta(). Uso de $GLOBALS['meta'][$nom] o lire_config('nom').
  • Supresión de auteur_referent(). Uso de auteur_associer().
  • Supresión de table_jointure(). Uso de la API editer_liens o las tablas de enlaces spip_xx_liens o spip_yy_liens, dependiendo de cada caso.
  • Supresión de modifier_contenu(). Usos de las funciones genéricas para la API de modificación de contenido.
  • Supresión de revision_objet(). Uso de objet_modifier().
  • Supresión de notifier_publication_article().
  • Supresión de notifier_proposition_article().
  • Supresión de calcul_branche(). Uso de calcul_branche_in().
  • Supresión de ecrire_metas().
  • Supresión de spip_query_db(). Uso de sql_query()u otro.
  • Supresión de spip_get_lock() et spip_release_lock() que ya no se utilizan.
  • Supresión de recuperer_entetes(). Uso de recuperer_entetes_complets().
  • Supresión de maj_version() et upgrade_vers() que ya no sirven.
  • Supresión de upgrade_types_documents(). Uso directamente de creer_base_types_doc() del plugin Medias.

Deprecaciones

  • El <BOUCLE(POUR) y sus criterios {tableau ...}se deprecan a favor de <BOUCLE(DATA) y su criterio {source table, ...}.
  • Asimismo, el filtro |foreach está en desuso a favor de la sintaxis basada en bucles (DATA).

Plugins

-  Los plugins breves, jquery_ui, organiseur, petitions, vertebres, squelettes_par_rubriques ya no se distribuyen con SPIP de forma predeterminada.
-  Pero breves, organiseur, petitions, squelettes_par_rubriques siempre se mantienen!
-  jquery_ui es mantenido por la comunidad, pero está deprecado.
-  vertebres aunque se abandona la funcionalidad en SPIP 4.0: el complemento Adminer es la alternativa más completa.

Breves

Funciones de PHP

  • Supresión de insert_breve(). Uso de breve_inserer().
  • Supresión de revisions_breves(). Uso de breve_modifier().

Ático

El ático está limpio y solo contiene las funciones eliminadas de SPIP 3.2 y SPIP 4.0.
Lo que es anterior a SPIP 3.2 ya no está presente en él.

Recibe las diversas funciones y archivos eliminados de SPIP 4.0 que potencialmente podrían ser utilizados por plantillas o complementos.

Media

Funciones de PHP

  • Supresión de document_set(). Uso de document_modifier()
  • Supresión de insert_document(). Uso de document_inserer()
  • Supresión de revision_document(). Uso de document_modifier()
  • Supresión de afficher_documents_colonne(). Utilice la inclusión prevista o una verdadera declaración de objeto editorial (la columna del documento se muestra automáticamente en la página de edición del objeto).
  • Supresión de lien_objet(). Uso de generer_lien_entite()
  • Supresión de instituer_document(). Uso de document_instituer()

Palabras

Funciones de PHP

  • Supresión de groupemots_inserer(). Uso de groupe_mots_inserer() o objet_inserer().
  • Supresión de groupemots_modifier(). Uso de groupe_mots_modifier() o objet_modifier().
  • Supresión de revision_groupe_mot(). Uso de groupe_mots_modifier().
  • Supresión de insert_mot(). Uso de mot_inserer().
  • Supresión de mots_set(). Uso de mot_modifier().
  • Supresión de revision_mot(). Uso de mot_modifier().

Solicitudes

El uso de peticiones ahora es opcional: están deshabilitadas por defecto en nuevas instalaciones [1]. Puedes activarlos en la configuración de los contenidos del sitio.

Sitios

Funciones de PHP

  • Supresión de insert_syndic(). Uso de site_inserer()
  • Supresión de revisions_sites(). Uso de site_modifier()
  • Supresión de syndic_set(). Uso de site_modifier()
  • Supresión de instituer_syndic(). Uso de objet_instituer()

Notas

[1En instalaciones existentes, este es el caso solo si no se usaron antes

Autor o autora henry Publicado el: Actualizado: 30/04/23

Traducciones: English, Español, français