API CFG : #FORMULAIRE_XX

A partir de CFG 1.9, les formulaires dynamiques simplifiés appelés CVT introduits dans SPIP 2.0 (encore en développement) peuvent être utilisés pour sauvegarder des données comme le fait un formulaire classique CFG, avec l’avantage qu’ils deviennent utilisables dans l’interface publique aussi, et ajaxables.

CFG permet de réaliser des formulaires publics, qui s’appuient sur les formulaires dynamiques CVT de SPIP 2.0.

Note : Cette fonction n’est disponible qu’avec une version SPIP 2.0 dev SVN récente. Cette version de SPIP est en développement et n’est pas encore stable. Cette API est donc encore susceptible d’évoluer.

SPIP et les formulaires publics

Une nouvelle API pour réaliser des formulaires publics a été introduit dans la version de SPIP 2.0 en développement. Réaliser un formulaire public nécessite maintenant 2 fichiers :
-  formulaires/x.html contient le formulaire
-  formulaires/x.php contient 3 fonctions :

  • formulaires_x_charger() charge les valeurs par défaut
  • formulaires_x_verifier() vérifie les valeurs envoyées lors de l’envoi du formulaire
  • formulaires_x_traiter() effectue des traitements si les valeurs envoyées sont valides.

Ces formulaires peuvent être rechargés en ajax, c’est à dire que seul la partie contenant le formulaire est actualisée, et non toute la page. Pour utiliser l’ajax, il faut encadrer le formulaire par une classe css ajax, par exemple en l’intégrant dans une balise <div class="ajax">

Fonctionnement des formulaires CVT avec CFG

Lorsqu’un formulaire dynamique placé dans le dossier formulaires/ n’a pas de fonction charger() alors c’est le parseur et les fonctions charger, vérifier et traiter de CFG qui sont utilisées.

Pour appeler un formulaire, il suffit d’indiquer son nom :
-  #FORMULAIRE_X

Il est possible de passer un identifiant (cfg_id) en premier paramètre du formulaire (rarement nécessaire)
-  #FORMULAIRE_X{#ID_ARTICLE}

Adapter le fond CFG

Pour permettre à votre formulaire CFG d’être lu de la sorte, il faut qu’il contienne la balise #ACTION_FORMULAIRE{#SELF} et que le champ action du formulaire soit rempli. Cela donne :

<form method="post" action="#SELF"><div>
#ACTION_FORMULAIRE{#SELF}
...
</div></form>

Attention :
-  [(#ENV{_cfg_}|form_hidden)] n’est plus nécessaire.

Afficher les messages de réussite ou d’echec

l’API des formulaires SPIP retourne plusieurs types de messages qui sont transmis à l’environnement : message_ok, message_erreur ainsi qu’un tableau erreurs qui contient des informations d’erreur pour chaque champ.

Ils s’utilisent comme ceci :

[<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>]
[<p class="formulaire_message">(#ENV*{message_ok})</p>]

[<span class='erreur'>(#ENV**{erreurs}|table_valeur{email_webmaster})</span>]

Formulaire minimal

Soit le formulaire formulaires/z.html contenant :

<!-- titre=Exemple sur le champ 'description' du site -->
<!-- depot=meta -->

#CACHE{0}

[<p class='formulaire_erreur'>(#ENV*{message_erreur})</p>]
[<p class="formulaire_message">(#ENV*{message_ok})</p>]

<form method="post" action="#SELF"><div>
#ACTION_FORMULAIRE{#SELF}

<label>Description du site</label>
<textarea name="description" rows="4" cols="40">[(#ENV{description})]</textarea>
[<span class='erreur'>(#ENV**{erreurs}|table_valeur{description})</span>]

<input type="submit" name="_cfg_ok" value="<:cfg:OK:>" />
</div></form>

Il peut être appelé par #FORMULAIRE_Z.

Le champ description sera enregistré, par défaut, dans z/description (que l’on peut récupérer donc par #CONFIG{z/description}. Pour enregistrer ailleurs, vous pouvez utiliser tous les paramètres CFG à votre disposition. Par exemple en mettant : <!-- nom=ici -->, cela enregistrera la valeur dans ici/description

Intégrer ces formulaires dans les pages ?exec=cfg&cfg=xx

Par défaut, ces formulaires ne s’ajoutent pas aux menus de la page ?exec=cfg, ni ne peuvent être appelés directement avec ?exec=cfg&cfg=xx si le formulaire est nommé #FORMULAIRE_XX.

Pour ajouter ce type de formulaire, il faut créer un autre fond différent du nom du formulaire (donc pas fonds/cfg_xx.html). Ce fond pourra recevoir des paramètres de CFG concernant l’affichage de la page (paramètres onglet, liens). Ce fond devra posséder le paramètre <!-- interpreter=non --> qui indique à CFG qu’il ne doit pas rechercher (analyser la page html retournée) des champs de formulaire dans cette page.

Si ce paramètre n’est pas présent, CFG va considérer les paramètres inclus par les #FORMULAIRE comme des champs à récupérer, ce qui pourrait entrainer des erreurs imprévues (exemple : lire une colonne qui n’existe pas dans une table provoquant une erreur sql).

Pour ces raisons, il est conseillé fortement, dans ce genre de fonds appelant des #FORMULAIRE de ne pas mettre en plus un formulaire CFG classique (<form>...</form>). Par contre, il est tout à fait possible de mettre plusieurs #FORMULAIRE différents.

Exemple de fond/cfg_plugin.html :

<!-- interpreter=non -->
<!-- description=Description de la page -->

<div class='ajax'>
#FORMULAIRE_XX
</div>

<!-- il est possible de mettre plusieurs formulaires dans un même fond -->
<div class="ajax">
#FORMULAIRE_YY
</div>

Discussion

Aucune discussion

Ajouter un commentaire

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

Qui êtes-vous ?
[Se connecter]

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom