Section: générateurs jforms
« moteurs d'urls | ^ Développer et utiliser des plugins | plugins pour la debugbar » |
− Table des matières
Comme il est indiqué dans le chapitre sur l'affichage des formulaires jforms, il est possible de choisir un plugin qui s'occupera de générer le code du formulaire (en HTML, javascript etc..) renvoyé au navigateur.
Note : Il s'agit ici des nouveaux types de plugins de Jelix 1.5 pour jForms. Voyez le manuel de Jelix 1.4 pour savoir comment sont réalisés les anciens plugins.
Vous avez deux types de plugins : ceux qui permettent de générer un formulaire entier, et donc qui "pilotent" la génération d'un formulaire et les plugins des widgets pour le générateur HTML par défaut, pour générer le code d'un seul contrôle de formulaire.
Plugin widget ¶
Le générateur HTML fourni par Jelix est un plugin, lui même extensible, utilisant des plugins de type "formwidget" pour générer chaque contrôle. Vous n'avez ainsi pas à développer tout un plugin générateur pour simplement rédéfinir le code HTML et JS généré d'un contrôle, comme c'était le cas dans Jelix 1.4 et précédent.
Un plugin "formwidget" doit implementer l'interface jelix\forms\HtmlWidget\WidgetInterface
, et
donc fournir ces methodes :
getId()
: renvoi l'id de l'élement HTML générégetName()
: renvoi le nom de l'élement HTML générégetValue()
: renvoi la valeur de l'élement HTML généré (valeur du controle en fait)outputMetaContent($resp)
: génére des liens CSS et Javascript pour la partie<head>
outputHelp()
: génère le code HTML de l'aide pour le champs de saisieoutputLabel()
: génère le libellé HTML du champsoutputControl()
: génère le champs HTMLsetAttributes($attributes)
: définie les attributs qui seront ajoutés sur l'élément HTML, ou des options pour le plugin.
Le plugin peut hériter de la classe jelix\forms\HtmlWidget\WidgetBase
, ainsi il y a moins de méthode à implémenter.
Le plugin doit avoir un nom. Il doit être stocké dans un fichier plugins/formwidget/{nom}/{nom}.formwidget.php
.
Voyez le code des plugins existants dans lib/jelix/plugins/formwidget/
pour en savoir plus sur le
fonctionnement des plugins "formwidget".
Plugin générateur ¶
Il faut d'abord donner un nom à votre générateur. Prenons "monhtml" par exemple. Ensuite :
- Créez un répertoire "monhtml" dans le répertoire "formbuilder" d'un dépôt de plugins.
- Créez un fichier
monhtml.formbuilder.php
- Dans ce fichier, créez une classe
htmlFormBuilder
qui hérite de\jelix\forms\Builder\BuilderBase
ou de\jelix\forms\Builder\HtmlBuilder
si vous faites un formulaire HTML similaire à ce que génère le générateur HTML par défaut de Jelix.
Dans cette classe, vous devez implémenter les méthodes qui suivent. Ces méthodes doivent afficher les différentes parties du formulaire (en clair, faire des echos), et ne renvoient pas de valeurs. Ces méthodes sont appelées par les différents plugins de templates de jforms.
Après chaque modification de votre générateur de jforms,
pensez à vider le cache de votre application (par exemple en utilisant la commande
cleartemp
), ceci afin de prendre en compte vos modifications.
/**
* output the header content of the form
*/
abstract public function outputHeader();
/**
* output the footer content of the form
*/
abstract public function outputFooter();
/**
* displays all the form. outputMetaContent, outputHeader and outputFooters are also called
* @since 1.1
*/
abstract public function outputAllControls();
/**
* displays the content corresponding of the given control
* @param jFormsControl $ctrl the control to display
* @param array $attributes attribute to add on the generated code (html attributes for example)
*/
abstract public function outputControl($ctrl, $attributes=array());
/**
* displays the label corresponding of the given control
* @param jFormsControl $ctrl the control to display
*/
abstract public function outputControlLabel($ctrl);
outputMetaContent ¶
Cette méthode doit récupérer l'objet réponse utilisée par le contrôleur, et y spécifier les feuilles de styles, les fichiers javascript à inclure dans la page finale. Exemple :
public function outputMetaContent($t) {
$resp= jApp::coord()->response;
if ($resp === null) {
return;
}
// si les fichiers sont dans le répertoire jelix
$www = jApp::config()->urlengine['jelixWWWPath'];
// ou si les fichiers sont dans un répertoire à vous dans www
$www = jApp::config()->urlengine['basePath'];
$resp->addJSLink($www.'js/fichier.js');
$resp->addCSSLink($www.'design/fichier.css');
}
Cette méthode est appelée avant toutes les autres.
outputHeader() ¶
Cette méthode doit générer les balises qui constituent la déclaration du
formulaire, ainsi que d'autres informations qui ne sont pas propres à chaque
contrôle. Par exemple, la méthode outputHeader
du générateur "html"
affiche la balise <form>
, la liste des erreurs présentes dans le
formulaire, les champs cachés, ainsi que quelques lignes de javascript.
outputFooter() ¶
C'est la dernière méthode appelée par les plugins de templates. C'est dans
celle-là donc que vous afficherez les dernières informations et balises. Par
exemple, la méthode outputFooter
du générateur "html" affiche la balise
fermante de <form>
, ainsi que d'autres lignes javascript.
outputAllControls() ¶
Cette méthode est appelée uniquement par le plugin formfull
. Elle doit
afficher tout les contrôles (en dehors des éléments affichés par outputHeader et
outputFooter).
outputControlLabel() ¶
Appelé par les plugins de template de jforms utilisés dans un plugin {form}
,
pour chaque label de champs de saisie. Cette méthode est donc chargée d'afficher
le libellé d'un champ de saisie.
Elle reçoit en argument un objet PHP jFormsControl
qui contient les
informations du champ de saisie dont il faut afficher le label.
outputControl() ¶
Appelé par les plugins de template de jforms utilisés dans un plugin {form}
,
pour chaque champ de saisie. Cette méthode est donc chargée d'afficher un champ
de saisie.
Elle reçoit en argument un objet PHP jFormsControl
qui contient les
informations du champ de saisie à afficher, et un tableau contenant
la liste des attributs à rajouter à la balise créé ou d'autres informations.