Version 4 — Mars 2014 — YannX
Utiliser des pipelines pour surcharger un formulaire de l’espace privé SPIP 3.
L’interface privée de SPIP 3 est complètement écrit en formulaires CVT avec une topologie Z : cela rend facile à un webmestre de personnaliser ses écrans privés, mais au risque de perdre les éventuelles améliorations apparaissant dans de nouvelles versions.
Une solution plus propre serait d’utiliser des pipelines spécialisés : voyons la démarche de mise en place à partir d’un exemple.
Le besoin s’est fait jour sur l’utilisation du plugin Mes Préférences, qui posait un problème de fonctionnement sur son design « Elastic » ; et la référence étudiée s’appuie sur le plugin [Polices Privées->zone.spip.org/trac/spip-zone/browser/_plugins_/police_prive/trunk/]. /]
Grace au système des formulaires CVT, il est facile de personnaliser des formulaires dans l’’espace public, et dans l’espace privé : dans ce dernier cas, il suffit de créer un sous-dossier ./prive/formulaires/
dans votre répertoire de squelettes, et d’y coller des copies des deux fichiers ( configurer_preferences.html
et configurer_preferences.php
depuis leur dossier d’origine ./prive/formulaires/
de la racine de SPIP). Le sytème de surcharge de chemin de SPIP va donc donner la pré-éminence à vos nouvelles copies (chargées dans notre cas depuis ./plugins/mes_preferences/privés/formulaires/
.
Notez bien que dans ce cas, on annule et remplace les fichiers d’origine !
Ce n’est pas très pérenne [1].
Le code du formulaire configurer_preferences du core n’utilise pas directement les facilités du plugin saisies ; neanmoins il utilise des blocs input standars, paramétrés par la valorisation de l’attribut name
au nom du champ à traiter : vous verrez donc chaque bloc <li .... input..
introduit par une ligne du genre :
#SET{name,theme}#SET{erreurs,#ENV**{erreurs}|table_valeur{#GET{name}}}
#SET{obli,''}
, ici pour le champ nommé « theme
»..
En fait, l’objectif est d’ajouter des champs (et également des options de choix) supplémentaires : ainsi le nouvel écran a-t-il proposé un nouveau champ (composé de quatre boutons radios de choix de la valeur des icônes de bandeau).
Le traitement de la largeur d’ecran est plus complexe, d’une part il faut rajouter un choix supplémentaire dans le bloc du champ de name
=spip_ecran
; mais il faut aussi tenir compte de d’un autre plugin apte à modifier cette valeur [2]
<div class="choix">
<input type='radio' class='radio' name='#GET{name}' id='[(#GET{name})]_elastic'[(#ENV{#GET{name}}|=={elastic}|oui)checked="checked" ]value="elastic"
onchange="if (this.checked) jQuery('body').addClass('elastic').removeClass('elastic'); else jQuery('body').removeClass('elastic').addClass('elastic');"/>
<label for="[(#GET{name})]_elastic"><:mes_preferences:info_elastic:></label>
</div>
Une solution propre consiste à rajouter par pipelines le bloc de code correspondant aux champs supplémentaires voulus : comment ce fait-se ?
Les plugins savent facilement activer des pipelines, identifiés par leur nom :
le terme de pipeline désigne un pré/ou/post-traitement (une fonction php) appliqué automatiquement par le compilateur SPIP au squelette résultant, ici au HTML généré par un #FORMULAIRE_..
; il faut différentier dans cette interprétation :
- le point d’entrée défini dans le core de SPIP par ses développeurs,
(voir la liste , issue du code de pipelines existants. )
- la fonction utilisateur activant ce traitement pour un cas d’usage
La déclaration des pipelines activés s’inscrit dans paquet.xml en SPIP 3 :
lugins