SPIP 2 se prépare

, par Matthieu Marcillaud

Sa sortie se fait toujours attendre, 2 ans après la sortie de la version 1.9.2, SPIP n’a toujours pas proposé de nouvelle version stable. Pourtant, on peut dire enfin que la version 2.0 de SPIP est prête. Les deniers bugs se corrigent, les préparatifs se font. Découvrons un peu les changements perceptibles, pour les utilisateurs, et ceux qui vont affecter les bidouilleurs.

A chaque pas que fait SPIP sur son long chemin, celui-ci devient plus abordable et plus simple à utiliser, tant pour les utilisateurs que pour les développeurs. L’interface privée évolue, les possibilités des squelettes (templates) s’agrandissent, alors que le code qui compose ce système de gestion de contenu devient plus clair et extensible.

Toujours le même

SPIP évolue, mais son âme reste. SPIP permet plus que jamais, non seulement de publier des contenus facilement par tous, mais surtout d’obtenir une maîtrise de l’affichage des pages grâce à son écriture de balises et de boucles : toute personne ayant quelques notions d’HTML et de CSS peut se lancer dans la conception de ses propres thèmes graphiques en incluant dedans les contenus de son site. Cette aisance à créer des maquettes web est une des principales forces de l’écureuil.

... mais en mieux

La version 2.0 naissante souhaite apporter un nouveau printemps à SPIP. Les nouveautés concernent principalement les bidouilleurs de squelettes, les développeurs ou hébergeurs, mais les noisettes ont été bien rangées, triées, scannées, polies pendant 2 ans. Ce code beaucoup plus propre va permettre de développer pour les prochaines versions des interfaces (notamment l’interface privée) plus ergonomiques et encore plus extensibles à d’autres objets (articles, rubriques, documents... ) de SPIP. Ca c’est le futur. Observons le présent.

L’installation plus courte

L’installation de SPIP se réalise maintenant en 4 étapes. Son design a été revu. On remarquera au passage que SPIP propose une liste de serveurs de base de données (selon la configuration de l’hébergement). En effet, SPIP peut maintenant fonctionner avec PostgreSQL et SQLite en plus de MySQL.

Presentation
Etape 1
Etape 2
Etape 3
Etape 4

Une fois l’installation terminée, l’utilisateur est amené à entrer son pseudonyme et mot de passe sur le nouveau formulaire de login. Celui-ci affiche maintenant les 2 champs contrairement à SPIP 1.9.2, et toujours de manière sécurisée, si javascript est actif, le mot de passe est crypté et ne circule pas en clair sur le réseau. On entre ensuite dans l’interface privée.

Interface privée simplifiée

Cette dernière aussi a évoluée : elle respecte maintenant XHTML Strict (il reste quelques lourdeurs de code html/css à reprendre néanmoins) et a vu s’installer de nombreuses actions en Ajax, c’est à dire que seul un morceau de page se recharge, accélérant toutes les actions à réaliser. C’est un réel nouveau confort pour les utilisateurs. Fini par exemple le texte d’un article qu’on perd parce qu’on avait voulu supprimer un document dans un article en cours d’édition. Maintenant le document se supprime, et ce qu’on avait tapé reste ! Ouf !

Login
Espace privé

Autre point à souligner, il n’y a plus de distinction entre interface simplifiée et interface avancée, source de nombreux tourments pour les utilisateurs. Il n’y a plus qu’une interface (modulo les différences entre administrateurs, rédacteurs et visiteurs), mais plus modulable.

Ainsi, il est possible grâce à de nombreuses options de configuration (en ajax par ailleurs) de définir quels seront les champs affichés ou non dans les articles, les rubriques, d’utiliser ou non la messagerie interne, de paramétrer les forums privés plus finement...

Configuration du site
Configuration interactivité
Configuration avancée

On remarque dans ce troisième écran de nouvelles possibilités très appréciables aussi : choisir le type d’url qui seront générées dont de nouvelles urls arborescentes (j’ai aussi des restes de vieilles url dans mon répertoire plugins qui s’affichent aussi - bug à corriger donc !) et aussi, permettre de compacter les fichiers CSS et les fichiers et scripts javascript pour réduire la charge du serveur et accelérer le chargement des pages pour les utilisateurs.

Restaurations de sauvegardes anciennes

Pour faciliter les transitions entre les données de SPIP 1.8.3/1.9.2 et SPIP 2.0, la restauration des sauvegarde se voit doter d’un outil puissant : l’importation d’un vieux dump (sauvegarde SPIP) recrée les tables d’origine (temporaires), effectue toutes les mises à jour nécessaires dessus, et une fois réalisé, recopie les contenus dans les tables réelles. De cette manière, on peut installer des sauvegardes de SPIP 1.8.3 sur un site neuf en SPIP 2.0.

On remarquera aussi de nouveaux outils pour la restauration : la fusion, qui permet de fusionner le contenu d’une sauvegarde avec le site actuel. De la même manière, il est devenu possible de sauvegarder partiellement le site pour n’extraire que le contenu d’un secteur par exemple). Il est aussi proposé de selectionner les tables SQL que l’on souhaite sauvegarder (on peut ainsi sauver les statistiques de son site)



Lorsqu’une sauvegarde ou restauration est terminée, on retombe sur la page d’accueil de l’espace privé.

Gestionnaire de plugin

La prise en compte des plugins par SPIP s’améliore avec cette version. Les bases ont été acquises avec SPIP 1.9.x, qui a vu naitre de nombreux plugins. On peut définir un plugin comme ce qui était appelé une contribution il y a longtemps chez SPIP. Un plugin peut donc apporter une fonctionnalité, un thème graphique, des outils pour webmestres...

SPIP 2.0 propose maintenant une page pour télécharger et installer automatiquement des plugins. Cet outil sera certainement revu dans les prochaines versions, mais est déjà bien fonctionnel. Si un répertoire plugins/auto/ existe, alors SPIP proposera de récupérer des listes de plugins (depuis les sites http://www.spip-contrib.net/ , http://plugins.spip.net/ ou depuis la zone de développement des plugins de SPIP). Chaque plugin pourra alors être installé si ses dépendances sont vérifiées. Un plugin A dépendant d’un plugin B et d’une librairie C pour une version de SPIP X ne pourra être activé que si toutes les conditions sont réunies.

Liste de plugins
Telechargement d'un plugin
Activation d'un plugin

Formulaires entièrement revus

Un des grands changements concerne les formulaires de SPIP. Pour la plupart, leur structure html a été harmonisée et ils peuvent, avec un système de construction simple appelé CVT (Charger, Vérifier, Traiter) être utilisés à la fois dans l’interface publique et dans l’interface privée.

Particulièrement, tous les formulaires d’éditions sont devenus des squelettes et peuvent être utilisés moyennant quelques autorisations (balise #AUTORISER) préalables dans le public. Ce formulaire article de SPIP (image ci-dessous) peut être appelé dans un squelette par la balise #FORMULAIRE_EDITER_ARTICLE{#ID_ARTICLE}

Edition d'article

On remarquera au passage le changement de look des formulaires. Pour ma part, je ne suis pas du tout fan, cette présentation me semble visuellement lourde, voire imposante. Heureusement, un plugin SPIP-Bonux propose un autre style plus reposant.

A noter enfin, un très appréciable formulaire pour télécharger des documents ou des images, plus simple d’utilisation (il y avait en SPIP 1.9.2 un formulaire distinct pour les documents et pour les images)

Nouveaux squelettes par défaut

On s’en aperçoit très rapidement, les squelettes par défaut de SPIP, la fameuse Dist, ont changé. Ce jeu de squelette, plus soigné que le précédent s’appuie maintenant sur la structure HTML de LayoutGala. Cela permet de modifier la disposition des différentes colonnes en modifiant quelques lignes de CSS. Quelques plugins proposent d’ailleurs des squelettes pour SPIP 2.0 avec une interface de configuration permettant de choisir le colonnage.

Squelettes Dist

De l’ajax dans ses squelettes

Les amoureux des paginations et des formulaires, apprécieront l’ajax. Toute noisette ou tout formulaire CVT peut être affiché et se recharger en ajax dans la page.

Imaginons une noisette noisettes/inc-derniers-articles.html qui contient une boucle avec une pagination <p class="pagination">#PAGINATION</p>. Inclure la noisette comme on a l’habitude, mais en ajoutant en plus le critère {ajax} et magie, la pagination recharge uniquement la noisette.

  1. <INCLURE{fond=noisettes/inc-derniers-articles}{env}{ajax} />

Le nouveau critère {env} d’ailleurs, permet de transmettre tout l’environnement du squelette à l’inclusion. C’est indispensable pour faire fonctionner les paginations correctement. Par contre transmettre tout l’environnement risque dans certain cas de créer des caches inutiles - il vaut mieux transmettre juste ce qui est nécessaire à la noisette.

Pour ce qui concerne les formulaires CVT, pour les rendre ajax, il suffit de les encadrer d’une class "ajax" et le tour est joué : <div class="ajax">#FORMULAIRE_ECRIRE_AUTEUR</div>

Je table, tu tables... il joint...

On connaissait les prouesses du compilateur pour interroger des tables non SPIP installés sur la même base de donnée.

  1. <BOUCLE_(TABLE){champA>4}>#CHAMPB #CHAMPC<br /></BOUCLE_>

Cet extraordinaire outil est maintenant capable de faire des jointures automatiques d’une grande finesse, soit en spécifiant les tables à joindre, soit en la nommant directement dans un critère. SPIP effectura alors des jointures sur les clés homonymes, prioritairement sur les clés primaire et les clés (ou sur une jointure explicitement déclarée, mais là n’est pas le propos).

  1. <BOUCLE_1(TABLE1 TABLE2){champ1A>4}>#CHAMP1B #CHAMP2C<br /></BOUCLE_1>
  2. <BOUCLE_2(TABLE1){champ1A>4}{table2.champ=8}>#CHAMP1B<br /></BOUCLE_2>

Télécharger

Cette dernière écriture est très pratique pour créer des sélections complexes. Exemple ici avec une boucle qui affiche tous les messages de forums de tous les articles d’un secteur qui vérifient un critère de recherche, classés par date de publication de l’article, puis points de recherche :

  1. <BOUCLE_messages_articles(FORUMS) {articles.id_secteur} {recherche} {!par articles.date}{!par points}{pagination 40}>
  2. ...

Télécharger

Déclarer d’autres base de données

Ajouter une base de donnée

Dans l’interface privée, il est maintenant possible de déclarer d’autres bases de données et d’y acceder dans les squelettes. Les fichiers de connexion sont stockés dans le répertoire config/ par défaut. S’il existe un fichier de connexion config/maconnexion.php, on pourra utiliser dans un squelette ceci pour appeler cette connexion précise et lire la table :

  1. <BOUCLE_(maconnexion:TABLE){par titre}{pagination 20}>
  2. ...

Télécharger

Si la connexion est un autre site SPIP, alors certains éléments peuvent être appliqués comme les balises #URL_* ou les jointures standart à SPIP.

De cette manière, il devient très aisé de lire tes tables provenant d’autres sources et même de serveurs SQL différents.

Enfin, pour terminer sur les bases secondaires, il est possible explicitement de dire que toutes les boucles d’une page doivent se calculer avec un fichier de connexion différent, simplement en ajoutant &connect=maconnexion dans l’url de la page. Ceci est très pratique pour tester rapidement un habillage graphique avec une base au contenu totalement différent.

Retrouver les inclusions

Lorsque sont installés de nombreux plugins ou qu’un squelette contient de nombreuses noisettes, il devient difficile en regardant une page de savoir quel fichier a produit tel affichage. Pour faciliter ces moments de construction ou de débugguage des squelettes, un mode d’appel des page a été créé. Ajouter &var_mode=inclure à l’url de la page encadre chaque noisette par un cadre indiquant le nom du fichier d’origine. Visuel et rapide.

Mode blocs

Recalculer les images

D’autres outils plus avancés ont aussi vu le jour pour le debugguage et l’optimisation des squelettes. Ainsi, &var_mode=images va recréer toutes les images calculées de la page en cours.

Analyser les requetes

De même, un mode &var_profile=1 permet d’afficher un tableau contenant le temps d’execution de chaque requete SQL et son origine (BOUCLE ou script), ce qui permet de détecter les requetes anormalement gourmandes.

Profile des requêtes

Ce n’est pas tout...

Ce n’est pas tout, loin de là, mais il est bien tard. Je continuerai un autre article un autre jour, qui parlera certainement un peu plus de programmation (c’est ici : SPIP 2 se prépare (suite))...

En tout cas, j’en profite pour remercier toute l’équipe de SPIP, tous les contributeurs et correcteurs, tous les accros des boucles, sans qui SPIP ne serait pas ce qu’il est : un outil plein de soleil et de tendresse !

Coup de pouce

Pour me maintenir en éveil et en pleine forme physique et mentale, vous pouvez me faire le cadeau d'un jus de fruit pressé.

En plus de m'hydrater, de m'offrir une alimentation saine crudivore et frugivore, cela peut aussi me motiver à produire d'autres documentations ou peut-être à prendre des vacances ! :)

Vous pouvez également me « Flattrer » si vous utilisez le service en ligne très malin Flattr de microdonations qui permet d'allouer un budget mensuel à des créateurs de contenu. Votre budget est partagé chaque mois entre toutes les personnes que vous avez flattées ce mois là.