Les formulaires CVT de SPIP Formulaires de SPIP par l’exemple

, par Matthieu Marcillaud

Introduction

Les formulaires de SPIP 2.0 sont maintenant découpés en 4 parties :

  • le HTML qui gère l’affichage graphique du formulaire,
  • la fonction charger() insère les valeurs préremplies,
  • la fonction verifier() contrôle les données soumises,
  • la fonction traiter() exécute les actions.

La partie HTML du formulaire est écrite dans le fichier formulaires/{nom}.html. Les 3 fonctions PHP dans le fichier formulaires/{nom}.php et s’appellent précisément :

  • formulaires_{nom}_charger_dist(),
  • formulaires_{nom}_verifier_dist(),
  • formulaires_{nom}_traiter_dist().

Le formulaire s’appelle dans un squelette SPIP par la balise #FORMULAIRE_{NOM}, par exemple #FORMULAIRE_PIPOTIN

Projet exemple : traduire via google

Nous avons besoin d’un formulaire disposant d’un champ texte, dont le contenu sera traduit en anglais en utilisant l’API de Google Translate au moment de la soumission.

HTML

La partie HTML ressemble à çà :

Analysons le code pour comprendre. Il y a plusieurs éléments. D’une part le code est encadré dans une balise <div> ayant une classe CSS générale « formulaire_spip » et une spécifique « formulaire_XX » :

Dedans, deux lignes servent à afficher les messages de réussite ou d’erreur :

Les variables d’environnement « message_erreur » et « message_ok » sont envoyées au squelette via les retour des fonctions PHP…

Ensuite, la description du formulaire ajoute grâce à la balise #ACTION_FORMULAIRE des informations utiles à SPIP pour le traitement du formulaire.

L’URL de soumission est calculée par SPIP et envoyée par la variable « action » à l’environnement du squelette.

Se trouve ensuite les champs du formulaire, structurés dans un chainage UL / LI. Ils affichent éventuellement des messages d’erreurs.

Les champs sont insérés avec des classes CSS particulières si le champ est obligatoire ou en erreur.

Pour terminer sur la partie HTML, signalons que la version 1.12 de CFG, à titre expérimental, propose une balise #SAISIE simplifiant l’écriture d’appel des champs de formulaire. Avec, cela donne l’écriture suivante :

Soit au complet, le formulaire HTML donnerait :

Charger

La fonction PHP charger() permet d’envoyer à l’environnement du squelette de formulaire des valeurs par défaut. La fonction retourne un tableau PHP correspondant au contexte de compilation. Mais, si les nom des clés du tableau correspondent à des variables qui ont déjà été soumises (par soumission du formulaire ou via l’URL), alors ce sont ces valeurs que le squelette utilisera pour son contexte.

Pour notre formulaire, nous allons avoir besoin de 2 paramètres, l’un pour recevoir le texte à traduire, l’autre pour retourner le contenu de la traduction.

Ici, par défaut les deux paramètres sont laissés vides. Lorsque l’on soumet le formulaire (si l’on a rempli le champ "traduire" dans celui-ci) - et que la fonction vérifier ou traiter indique qu’il faut réafficher la saisie, la gestion de CVT fait que le texte soumis dans le champ "traduire" sera réintroduit automatiquement dans le contexte au chargement du formulaire. On ne perd donc pas les données saisies si une erreur apparaît.

Paramètres d’un formulaire

Il est possible d’envoyer des paramètres lors de l’appel du formulaire dans les squelettes, par exemple :

Ces deux paramètres sont alors récupérables en tant que paramètres des fonctions Charger, Vérifier et Traiter :

Vérifier

Elle sert à tester les saisies des utilisateurs et à retourner éventuellement des messages d’erreur en cas de problèmes, qui peuvent être spécifiques à un champ de saisie. Pour notre exemple, on peut proposer :

La fonction vérifier est assez simple : elle retourne un tableau PHP vide s’il n’y a pas d’erreur, un tableau non vide s’il y a une erreur quelconque.

Traiter

C’est la fonction qui s’occupe de tout les traitements que doit exécuter le formulaire lorsque les vérifications sont valides.

Cette fonction retourne un tableau PHP qui peut contenir entre autre les clés "message_ok", "message_erreur", "editable" (si le formulaire doit ou non être réaffiché après le traitement).

Ici, nous devons interroger une page distante de Google et récupérer son résultat. On utilise l’API de SPIP pour cela (recuperer_page) et la fonction de PHP 5.2 pour analyser le JSON (tableau javascript) récupéré.

En cas d’erreur, on le signale ; en cas de réussite, on force l’insertion du texte récupéré dans le prochain chargement du formulaire, avec la fonction de SPIP « set_request() »