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.
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.
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.
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 modelosdoc.html
,img.html
etemb.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 modelosimage.html
,audio.html
,video.html
etfile.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 atrue
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 argumentolabel_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 tipopage
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 filtrosingulier_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 opcionalabbr
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 estrue
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 solopaquet.xml
. Por lo tanto, un plugin que solo tengaplugin.xml
(sinpaquet.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 enprive/squelettes
.
Balisas / Filtros / Criterios
- Eliminación de balisas
#DEBUT_SURLIGNE
y#FIN_SURLIGNE
deprecadas desde SPIP 2. Uso de las clases CSSsurlignable
ypas_surlignable
. - Los filtros
aligner
,aligner_gauche
,aligner_droite
,centrer
,justifier
ystyle_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 despip_fetch_array()
. - Supresión de
generer_url_retour()
. Uso deparametre_url()
en su lugar, con el parámetro ’redireccionar’. - Supresión de
charger_php_extension()
(Uso deextension_loaded()
). - Supresión de
revisions_articles()
. Uso dearticle_modifier()
. - Supresión de
revision_article()
. Uso dearticle_modifier()
. - Supresión de
articles_set()
. Uso dearticle_modifier()
. - Supresión de
insert_article()
. Uso dearticle_inserer()
. - Supresión de
instituer_article()
. Uso dearticle_instituer()
. - Supresión de
insert_auteur()
. Uso deauteur_inserer()
. - Supresión de
auteurs_set()
. Uso deauteur_modifier()
. - Supresión de
instituer_auteur()
. Uso deauteur_instituer()
. - Supresión de
revision_auteur()
. Uso deauteur_modifier()
. - Supresión de
insert_rubrique()
. Uso derubrique_inserer()
. - Supresión de
revisions_rubriques()
. Uso derubrique_modifier()
. - Supresión de
instituer_rubrique()
. Uso derubrique_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 deversion_vcs_courante()
. - Supresión de
lire_meta()
. Uso de$GLOBALS['meta'][$nom]
olire_config('nom')
. - Supresión de
auteur_referent()
. Uso deauteur_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 deobjet_modifier()
. - Supresión de
notifier_publication_article()
. - Supresión de
notifier_proposition_article()
. - Supresión de
calcul_branche()
. Uso decalcul_branche_in()
. - Supresión de
ecrire_metas()
. - Supresión de
spip_query_db()
. Uso desql_query()
u otro. - Supresión de
spip_get_lock()
etspip_release_lock()
que ya no se utilizan. - Supresión de
recuperer_entetes()
. Uso derecuperer_entetes_complets()
. - Supresión de
maj_version()
etupgrade_vers()
que ya no sirven. - Supresión de
upgrade_types_documents()
. Uso directamente decreer_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 debreve_inserer()
. - Supresión de
revisions_breves()
. Uso debreve_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 dedocument_modifier()
- Supresión de
insert_document()
. Uso dedocument_inserer()
- Supresión de
revision_document()
. Uso dedocument_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 degenerer_lien_entite()
- Supresión de
instituer_document()
. Uso dedocument_instituer()
Palabras
Funciones de PHP
- Supresión de
groupemots_inserer()
. Uso degroupe_mots_inserer()
oobjet_inserer()
. - Supresión de
groupemots_modifier()
. Uso degroupe_mots_modifier()
oobjet_modifier()
. - Supresión de
revision_groupe_mot()
. Uso degroupe_mots_modifier()
. - Supresión de
insert_mot()
. Uso demot_inserer()
. - Supresión de
mots_set()
. Uso demot_modifier()
. - Supresión de
revision_mot()
. Uso demot_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()