Carnet Wiki

Surcharger un formulaire du privé

Version 4 — March 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/]. /]

extrait de l'ecran SPIP3 configurer_preferences
extrait de l’ecran SPIP3 configurer_preferences

La surcharge classique de formulaires

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].

L'ecran surchargé pour Mes préférences
L’ecran surchargé pour Mes préférences
Un champ supplémentaire (4 boutons-radio) est ajouté au début du formulaire ; une valeur supplémentaire est insérée dans le dernier champ de bouton-radios.

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”..

Le paramétrage supplémentaire voulu

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>

Activer un pipeline

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