Avant de mettre SPIP à jour
- Vérifier votre version de PHP : Il faut PHP 7.3 minimum pour passer à SPIP 4.0
- Ne pas oublier de mettre à jour les plugins, notamment SPIP-Bonux en version >= 3.7.1 pour éviter un conflit.
- Vérifier la compatibilité 4.0 des plugins dans les fichiers paquet.xml (ou bien rajouter temporairement dans mes_options.php
define('_DEV_VERSION_SPIP_COMPAT',"3.2.99");
Pour vous aider à vérifier la compatibilité des plugins, vous pouvez utiliser le plugin Vérifier ses plugins avant un changement de version de SPIP ; vous pouvez aussi vous sauvegarder le résultat du plugin Lister les plugins nécessaires au site —dans un fichier
./plugins/spip_site_config.../paquet.xml
— pour ultérieurement contrôler la ré-activation de tous vos plugins ! - Les plugins du core breves, jquery_ui, organiseur, petitions, vertebres, squelettes_par_rubriques ont été retiré en SPIP 4.0. [1]. Pensez à noter si vous utilisez l’un de ces plugins pour le réinstaller après le passage à SPIP 4.0...
Supprimer les plugins qui ne sont plus nécessaires
- Le plugin BigUpload a été intégré au core SPIP en plugins-dist
- La modification de l’interface privé avec Ecran large n’est plus nécessaire
Proposition d’ordre de migration
- Faire une sauvegarde ! (contenu des fichiers du serveur et la base de donneés)
- Faire vos tests dans une copie du site (ou acceptez l’audace directement)
- Migrer votre SPIP 3.2 dans sa dernière version stable si ce n’est pas déjà le cas >= 3.2.11 (il sera compatible jusqu’à PHP 7.4)
- Mettre à jour les plugins (particulièrement SPIP-Bonux en version >= 3.7.1)
- Basculer votre hébergement en PHP 7.3 ou 7.4
- uniquement pour SPIP 4.1+ Le nouveau système d’authentification de SPIP nécessite l’extension Sodium, au besoin si vous avez une erreur de type
Erreur d’exécution ../prive/squelettes/body.html | File […]/ecrire/src/Chiffrer/Chiffrement.php Line 68 : Call to undefined function Spip\Chiffrer\sodium_crypto_secretbox_keygen()
pour activer Sodium dans votre php.ini, décommenter la ligne
extension = sodium.so
- (optionnellement pour tests) Définir la constante
define('_DEV_VERSION_SPIP_COMPAT',"3.2.99");
dans mes options - Installer SPIP 4.0 par dessus (via Spip-loader, checkout ou spip-cli)
- Supprimer plugins-dist/breves, organiseur, petitions, squelettes-par-rubriques (normalement, cela été fait par spip-loader qui les a déplacer dans un répertoire fichiers_obsoletes_.... Si ce n’est pas le cas par exemple en cas de timeout, erreur 500, ... il peut être intéressant placer les fichiers en FTP en déplacant les fichiers dans un repertoire _spip32)
- Se connecter à écrire et effectuer la migration de base de données
- Videz le cache (conservez le cache des images) depuis Le menu Maintenance
- Page plugin > Supprimer les dépots existants pour être sur d’avoir le dernier dépôt disponible et purger le cache de SVP
- Lancer une mise à jour des plugins
Sinon, passer par le champ de saisie de l’URL d’un nouveau téléchargement —plus bas— que vous obtiendrez par rebond en cliquant-droit pour une nouvelle fenêtre sur le lien « Documentation » ! - Re-télécharger éventuellement les plugins breves, organiseur, petitions, squelettes-par-rubriques si votre site en a besoin.
- Tester tout ça...
Changement de gestion des documents
- Les logos
- Les modèles d’insertion
- La notion de portfolio disparait
Mise à jour des plugins et squelettes
Du fait de la disparition du plugin-dist des breves (et donc de la table), vous pouvez proprement désactiver vos boucles sur les BREVES,etc...
en remplaçant dans vos squelettes le commentaire [(#REM) Breves ] <B_breves>
... par
[(#PLUGIN{breves}) Breves du secteur
<B_breves>
sans oublier de rajouter un crochet fermant après la boucle </B_breves>
]
Pagination : changement de syntaxe et d’arguments
- En SPIP 3.2 on écrivait
[<p class='pagination'>(#PAGINATION{prive})</p>]
- En SPIP 4.0, il faut :
[<nav class='pagination' role='navigation'>(#PAGINATION)</nav>]
Le changement porte sur la balise englobante, qui doit désormais être un nav
ET sur les arguments.
Il n’existe plus qu’un seul modèle de pagination, et les différences de pagination se font en lui passant des arguments :
- afficher_lien_precedent=oui
pour afficher le <
vers les résultats précédents
- afficher_lien_suivant=oui
pour afficher le >
- page=oui (à confirmer) pour afficher les n° de page
- rang=oui (à confirmer) pour afficher les rangs des réponses
- encore 1 ou 2 arguments à repêcher
De plus, la détection automatique de l’espace privé permet de paramétrer la pagination adaptée sans qu’il soit nécessaire de passer ce choix en argument.
N.B. Le nouveau code pour SPIP 4.0 fonctionne avec SPIP 3.2, on pourra donc, pour assurer la compatibilité (des squelettes, mais aussi des plugins), conserver l’argument de l’ancienne version ainsi :
[<nav class='pagination' role='navigation'>(#PAGINATION{prive})</nav>]
CSS : pour les CSS on peut s’inspirer de ceux de la dist ou des exemples d’adaptation suivants :
- Squelette kamakura (avec flex)
- Squelette sendagi (avec flex)
- W.F. sur la mailing liste (avec float)
.pagination-items { margin: 10px 0 0 20px; }
.pagination-item { width:25px; float:left; }
.pagination-item-label.on { font-weight: bold ; font-size:1.8em ; }
.pagination-item.prev, .pagination-item.next { width:200px; font-size:0.8em; }
.pagination-item.prev.disabled, .pagination-item.next.disabled { font-size:0.6em; color:grey; }
.pagination-item.prev a:hover, .pagination-item.next a:hover{ color:green; }
Structure HTML des formulaires
- Fin du support des ul/li. Il faut mettre un
<div>
à la place des<ul>
et des<li>
.
- les saisies, case unique, checkbox, doivent être dans un fieldset avec légende, portant la classe. Dans certains cas, le
<legend>
remplace un<h3>
- Le plugin dev présente une charte formulaire exemple et un exemple de formulaire « mini ».
Exemple d’adaptation : https://git.spip.net/spip-contrib-extensions/sociaux/commit/d01708b6
Nommage des boucles
A partir de SPIP 4.0 les boucles doivent être obligatoirement nommées avec un nom commençant par un underscore « _ » (sauf les boucles anonymes ^^) ;
<BOUCLE_nom_boucle>...</BOUCLE_nom_boucle>
Les boucles suivantes ne sont plus acceptées et lèvent une erreur
<BOUCLES_actu(ARTICLES)>....</BOUCLES_actu> // mauvais boucle avec un "S"
<BOUCLEtest(ARTICLES)>....</BOUCLEtest> // mauvais pas de "_"
...
Boucles (POUR){tableau
→ (DATA){source table
Les boucles (POUR)
devraient être réécrites :
<BOUCLE_chapitre(POUR){tableau #ENV{passage_texte}}>
Devient :
<BOUCLE_chapitre(DATA){source table, #ENV{passage_texte}}>
HTML généré par SPIP
En SPIP 4, le HTML produit comprend quelques différences qu’il faut parfois reprendre dans l’habillage CSS des squelettes
Le raccourci SPIP {{{ ... }}}
des intertitres produit maintenant un
<h2 class="spip">...</h2>
au lieu de
<h3 class="spip">...</h3>
Le modèle <doc>/<img>
a évolué
FORMULAIRE_INSCRIPTION : changement de syntaxe
- La legend porte la classe
.label
- Le fieldset porte la classe
.editer
Les arguments changent, surtout le 3e argument. Voir dans le forum de la partie privée sous la doc sur spip.net.
Images
Beaucoup d’images du privé au format gif ou png ont été transformé en SVG.
A priori rien à faire car SPIP détecte et s’adapte en créant un SVG à la taillle demandée.
Par contre certaines images (deplierhaut.gif, ....) ont été entièrement supprimées.
Si on veut faire les choses proprement :
- on peut supprimer tous les png
- on faut ajouter une icone au format SVG avec la convention de nommage suivante :
monplugin-64.png -> monplugin-xx.svg.
- ( quelques conseils pour le graphisme des icones)
Fonctions dépréciées
- lire_meta qui devient lire_config
- recuperer_page qui devient recuperer_url
- ...
Dans jQuery
- size()
est déprécié et provoque des erreurs. Il faut le remplacer par length
comme conseillé dans la doc .size(). Exemple de remplacement
Supprimer les plugins.xml qui traînent
Avant de supprimer un plugin.xml il faut faire une branche de version en cours.
Puis donc dans la branche master = le supprimer + dans paquet.xml changer les bornes SPIP au minimum [3.0.0 ;4.0.*] + monter la version en x
Disparition de certains plugins-dist
Certains plugins (breves, petitions, etc voir la note de release) ne sont plus fournis avec SPIP. Si vos squelettes utilisent les tables créées et gérées par ces plugins, il faut
- soit charger et activer ces plugins par SVP, si votre site les nécessite
- soit, si leur usage est facultatif, adapter les squelettes pour une utilisation conditionnelle. Exemple d’adaptation
En revanche si vous ne les utilisiez pas, pour faciliter leur suppression lors de la migration 3.2 -> 4.0, le plugin dédié Léon est mis à votre disposition : Léon
jQuery ui
jQuery ui sort des plugins distribués avec le core pour devenir un plugin dédié
Pour les fonctions de drag’n’drop, on peut aussi le remplacer avantageusement par sortable.js qui est embarqué dans le core, et qui peut aussi faire du drag’n’drop : https://sortablejs.github.io/Sortable/#cloning
Autres liens
- Annonce SPIP 4.0.0 : https://blog.spip.net/SPIP-4-0-tout-simplement.html
- Changelog SPIP 4.0.0 : https://www.spip.net/6428
- Annonce SPIP 4.0.0-beta : https://blog.spip.net/O-joie-C-est-SPIP-4-0-0-beta.html
- Annonce SPIP 4.0.0-alpha : https://blog.spip.net/O-mega-c-est-SPIP-4-0-alpha.html
- Documentation déjà publiées sur spip.net, portant sur des améliorations des balises, critères ou filtres pré-existantes : https://www.spip.net/spip.php?page=recherche&recherche=%22spip+4.0%22
- Documentation sur https://programmer.spip.net concernant SPIP 4 alpha : https://www.spip.net/spip.php?page=recherche&recherche=%22spip+4.0%22
- Passer de SPIP3 à SPIP4 par b_b : https://blog.eliaz.fr/article206.html
- Mise à jour des plugins après un passage de SPIP 3 à SPIP 4
Attention : dans la documentation, SPIP 4 est encore parfois appelé SPIP 3.3.
Complément
- voir les forums de la doc en cours sur spip.net