*HtmlForm.txt*                                                     HtmlForm 0.9

HtmlForm - mini framework PHP5 pour formulaire HTML.

Il permet d'automatiser les opérations répétitives sur les formulaires HTML :
- affichage des champs du formulaire,
- reprise des entrées utilisateur dans les champs,
- affichage des messages d'erreur.

En plus de ces fonctions utilisateur, HtmlForm propose des outils pour
les développeurs :
- ecriture des tests des valeurs des champs,
- protection des valeurs par défaut et des entrées utilisateurs,
- création des portions de requête SQL,
- extension des classes de champs spécifiques,
- utilisation d'un moteur de template.

|Exemple|                   Un exemple simple pour commencer.
|Syntaxe-globale|           Explication et démonstration de la syntaxe.

|Nom-de-champ|              Modifier le nom du champ.
|Label-de-champ|            Modifier le label d'un champ.
|Champ-obligatoire|         Rendre un champ obligatoire.
|Verification-des-valeurs|  Ajouter des testes sur les valeurs.
|Message-d-alerte|          Définir les messages d'erreurs liée aux champs.
|Nom-exportable|            Modifier la correspondance SQL.
|Valeurs-predefinies|       Ajoute ou modifie les valeurs prédéfinis.
|Table-de-traduction|       Choisir une table de traduction.
|Valeur-par-defaut|         Ajoute une valeur par défaut.

|Formulaire-valide|         Actions réalisées si le formulaire est valide.

|Type-de-champ|             Les types de champs disponibles de base.

|Decorateur|                Afficher un formulaire.
|Smarty|                    Utiliser smarty pour afficher le formulaire.

|Parametre-du-formulaire|   Les méthodes et propriétés du formulaire.
|Parametre-des-champs|      Les méthodes et propriétés des champs.
|Export-MySQL|              Exporter les valeurs pour MySQL.
|Plus-de-champ|             Créer de nouveau champ prédifinis.
|Plus-de-decorateur|        Comment créer un décorateur compatible.

===============================================================================
EXEMPLE                                                               *Exemple*

Ci-dessous un exemple simple de formulaire d'inscription : >
  
  $form = HtmlForm::hie('subscribe')
    ->text('name')
    ->text('address')
    ->country()
    ->sumbit()
    ->onValid('insert');

HtmlForm utilise les interfaces fluides pour établir sa configuration ; ainsi,
chaque méthode retourne l'objet lui même, cela permet d'appeler les méthodes
les unes derrière les autres.
 
- La méthode 'text' ajoutera un champ de type 'text'.
- La méthode 'country' ajoutera un champ de type 'select'.
- La méthode 'submit' ajoutera un bouton 'submit'.
- La methode 'onvalid' appelera la fonction 'insert' quand le formulaire sera
  validé.

===============================================================================
SYNTAXE                                                       *Syntaxe-globale*

Des méthodes pour la configuration ~
La classe HtmlForm dispose d'une série de méthode surchargée qui permette
d'effectuer trois opérations :
- ajouter un champ,
- modifier un paramètre du dernier champ ajouté,
- modifier un paramètre du formulaire.

Ainsi, la méthode 'text' ajoutera un champ 'input' de type 'text' au
formulaire, tandis que 'label' permettra de modifier le label du champ 'text'
fraîchement ajouté. >

  $form->HtmlForm::hie('subscribe')
    ->text('name')->label('Nom et prénom');

L'exemple ci-dessus créera un formualire nommé 'subscribe' et lui ajoutera un
champ de saisie nommé 'name' avec son label "Nom et prénom".

Concernant les méthodes de création de nouveau champ, consulter le chapitre :
|Type-de-champ|             Les types de champs disponible de base.

Concernant les méthodes de paramètrage des champs :
|Nom-de-champ|              Modifier le nom du champ.
|Label-de-champ|            Modifier le label d'un champ.
|Champ-Obligatoire|         Rendre un champ obligatoire.
|Verification-des-valeurs|  Ajouter des testes sur les valeurs.
|Message-d-alerte|          Définir les messages d'erreurs liée aux champs.
|Nom-exportable|            La correspondance du nom du champ pour SQL.
|Valeurs-predefinies|       Ajoute ou modifie les valeurs prédéfinis.
|Table-de-traduction|       Choisir une table de traduction.
|Valeur-par-defaut|         Ajoute une valeur par défaut.

Concernant les méthodes de paramètrage du formulaire :
|Parametre-du-formulaire|   Les méthodes de configuration du formulaire.

Création d'un formulaire ~
Pour créer un nouveau formulaire, il faut appelé la méthode statique 'hie' et
lui passer le nom du formulaire en paramètre. >

  $form = HtmlForm::hie('subscribe');

GET ou POST ~
Par défaut HtmlForm défini les formulaires comme étant envoyé en POST, pour
spécifier un comportement particulier, utilisez les méthodes 'setget' et
'setpost'. >

  $form = HtmlForm::hie('subscribe')->setGet();

  $form = HtmlForm::hie('subscribe')->setPost();

Selection d'un champ ~
En utilisant les interfaces fluides, lors de la configuration d'un champ,
celui-ci reste actif jusqu'à ce qu'un autre champ soit ajouté. Pour revenir au
champ précédent, utilisez les méthodes 'selectelement'. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo')                  // Ajoute un champ pseudo
    ->text('name')                    // Ajoute un champ name
    ->selectElement('pseudo')         // Re-selectionne le champ pseudo
      ->label('Ton pseudo');          // Modifie le label du champ pseudo

Accéder à un champ ~
Pour récupérer une référence d'une instance d'un champ, utilisez objet
'htmlform' comme un tableau. >

  $form = HtmlForm::hie('subscribe')
    ->text('name');

  $name = $form['name'];    // $name est un objet de la classe HtmlFormElement

Accèder à la valeur client ~
La valeur envoyé par le client est stocker dans la propriété 'value' de chaque
instance de champ. >

  $form = HtmlForm('subscribe')
    ->text('pseudo');

  echo $form['pseudo']->value;    // affichera la valeur de $_POST['pseudo']
  echo $form['pseudo']->html;     // affichera la valeur de manière protégée

Parcourir les elements ~
Pour parcourir tous les elements d'un formulaire utilisez l'instruction
'foreach'. >

  $form = HtmlForm::hie('subscribe')
    ->text('name')
    ->text('address');

  foreach( $form as $field )
    echo $field->name;          // affichera : nameaddress

===============================================================================
NOM                                                              *Nom-de-champ*

Le nom des champs correspond à la valeur de l'attribut HTML 'name' de chaque
balise <input>, <button>, <select> ou <textarea>.

Il est conseillé de spécifier le nom du champ à sa création. >

  $form = HtmlForm::hie('subscribe')
    ->text('first name');

Néamoins il est possible de le modifier par la suite de trois manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('name')
    ->text('address')
    ->text('city');

  $form['name']->name = 'newName';

  $form['city']->setName('newName');

  $form->selectElement('address')->name('newAddress');

IMPORTANT ! ~
Changer le nom d'un champ modifie uniquement la valeur de l'attribut HTML
'name' et pas la clef utilisée par l'application. Ainsi, si vous voulez
re-accédez au champ 'name' vous ne pourrez pas le faire avec la clef
'newname'. >

  $form['name']->name = 'newName';
  $form['newName'];                  // OutOfBoundsException lancé.

===============================================================================
LABEL                                                          *Label-de-champ*

Plusieurs champs spécifiques possèdent un label en anglais par défaut. Les
champs générique comme 'text', 'select', 'button' et 'area' n'en possède pas.
HtmlForm leurs attribura alors leur propre nom avec une majuscule.

Pour spécifier le label d'un champ, utilisez la méthode 'label' après avoir
ajouté un champ. >

  $form = HtmlForm::hie('subscribe')
    ->text('name')->label('Nom et prénom');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('name');

  $form['name']->label = 'Nom et prénom';

  $form['name']->setLabel('Nom et prénom');

Astuces ~
Pour que le décorateur n'affiche pas de label, passez la valeur 'false' à la
méthode 'label'.

===============================================================================
OBLIGATOIRE                                                 *Champ-obligatoire*

Rendre un champ obligatoire empêchera au formulaire d'être validé si ce champ
n'est pas rempli.

Pour rendre un champ obligatoire, utilisez la méthode 'required'. >

  $form = HtmlForm::hie('subscribe')
    ->text('name')->required();

Par défaut, si le champ n'est pas rempli un message d'erreur en anglais est
utilisé. Pour spécifier le message passez une chaîne de caractère en paramètre
à la méthode 'required'. >

  $form = HtmlForm::hie('subscribe')
    ->text('name')->required('Ce champ est obligatoire');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('name');

  $form['name']->required = 'Nom et prénom';

  $form['name']->setRequired('Nom et prénom');

===============================================================================
VERIFICATION                                         *Verification-des-valeurs*

Pour vérifier les valeurs des champs, il y a deux grandes façons cumulables de
faire :
- en utilisant des expressions rationnelles,
- en utilisant des fonctions de 'callback'.

Expressions rationnelles ~
Pour ajouter une vérification par expression, utilisez la méthode 'check' en
lui passant une expression en paramètre. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo')->check('/^\w{3,24}$/');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo');

  $form['pseudo']->check = '/^\w{3,24}$/';

  $form['pseudo']->setCheck('/^\w{3,24}$/');

Fonction de callback ~
Pour ajouter une vérification par fonction, utilisez la méthode 'check' en
lui passant le nom d'une fonction en paramètre. >

  fucntion address( HtmlFormElement $field, HtmlForm $form )
  {
    if( $field->value == '102 missile fixe' )
      return true;
  }

  $form = HtmlForm::hie('subscribe')
    ->text('address')->check('address');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo');

  $form['pseudo']->check = 'address';

  $form['pseudo']->setCheck('address');

Astuces ~
La méthode 'check' prend un nombre infini de paramètres, vous pouvez donc
définir plusieurs tests avec le même appel à la méthode.

===============================================================================
MESSAGE                                                      *Message-d-alerte*

Si un champ n'a pas passé la phase de vérification, un message peut être
affiché pour alerté l'utilisateur. Utilisez la méthode 'alert'. >

  $form = HtmlFoem::hie('subscribe')
    ->text('pseudo')
      ->check('/^\w{3,24}$/')
      ->alert('Entre 3 et 24 lettres et chiffres uniquement');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo')->check('/^\w{3,24}$/');

  $form['pseudo']->alert = 'Entre 3 et 24 lettres et chiffres uniquement';

  $form['pseudo']->setAlert('Entre 3 et 24 lettres et chiffres uniquement');

Si une fonction de 'callback' est utilisée - voir |Verification-des-valeurs| -
il est possible d'avoir plusieurs messages d'erreur. La fonction de 'callback'
retournera le choix du message à afficher. >

  function verif_pays( HtmlFormElement $field, HtmlForm $form )
  {
    if( $field->value == 'FR' )
      return 'pas_france';
  }

  $form = HtmlForm::hie('subscribe')
    ->country('pays')
      ->check('verif_pays')
      ->alert( array(
        'pas_france' => 'Vous ne pouvez pas choisir la france' ) );

===============================================================================
SQL                                                            *Nom-exportable*

Lors de l'export en requête SQL - voir |Export-MySQL| - un nom de substitution
est utilisé, par défaut, il est identique au nom du champ. Pour le modifier,
utilisez la méthode 'map'. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo')->map('use_name');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo');

  $form['pseudo']->map('use_name');

  $form['pseudo']->setMap('use_name');

===============================================================================
LISTE DE VALEURS                                          *Valeurs-predefinies*

Les champs de type 'select', 'radio' et 'checkboxs' contiennent une listes de
valeurs pré-définis que l'utilisateur doit choisir. Pour modifier cette liste
de valeurs, utilisez la méthode 'values' avec un 'array' en paramètre >

  $form = HtmlForm::hie('subscribe')
    ->radio('genre')->values(array(
      'G'=>'Girl',
      'B'=>'Boy'));

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('genre');

  $form['genre']->values(array('G'=>'Girl','B'=>'Boy'));

  $form['genre']->setValues(array('G'=>'Girl','B'=>'Boy'));

Ajouter et non remplacer ~
Pour ajouter des éléments dans la liste sans remplacer cette dernière, il
suffit de passer une ou plusieurs chaînes de caractères à la méthode
'values'. >

  $form = HtmlForm::hie('subscribe')
    ->radio('civilite')->values('monsieur','madame')->values('mademoiselle');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('civilite');

  $form['civilite']->values = 'monsieur';
  $form['civilite']->values = 'madame';
  $form['civilite']->values = 'mademoiselle';

  $form['civilite']->setValues('monsieur','madame')->setValues('mademoiselle');

Dans ce cas, les clefs utilisées seront un nombre incrémentale débutant à
partir de 1.


===============================================================================
TRADUCTION                                                *Table-de-traduction*

Pour les champs de type 'select' utilisant des valeurs pré-définie, il est
possible d'y joindre une table de traduction en utilisant la méthode 'i18n'. >

  $form = HtmlForm::hie('subscribe')
    ->country()->i18n('french');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->country();

  $form['country']->i18n = 'french';

  $form['country']->setI8n($form['country'], 'french');

Cet exemple traduira tous les noms des pays du champ 'country' en français.

===============================================================================
VALEUR PAR DEFAUT                                           *Valeur-par-defaut*

Si le client ne fourni pas de valeur pour un champ, il est possible de
spécifier une valeur par défaut pour celui-çi. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo')->default('Ton pseudo');

Ou utilisez une des deux autres manières. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo');

  $form['pseudo']->default = 'Ton pseudo';

  $form['pseudo']->setDefault('Ton pseudo');

===============================================================================
VALIDATION                                                  *Formulaire-valide*

Le processus de validation est automatiquement lancé si le formulaire est affiché
avec le classe 'htmlout' - voir |Decorateur| - sinon, il existe deux manières
d'appeler la vérification est d'effectuer des opérations si cette dernière a
réussi :
- en utilisant la méthode 'isvalid',
- en utilisant une fonction de 'callback'.

isValid ~
Dans un processus contrôlé par le développeur, l'appel à la méthode 'isvalid'
lancera le processus de validation est retournera 'true' si ce denier à
réussi, ou 'false' s.il a échoué. >

  $form = HtmlForm::hie('subscribe')
    ->text('address')
    ->submit();

  if( isValid() )
  {
    // mes instructions
  }

Information ~
La méthode 'isvalid' met en cache le résultat de la validation, il n'est donc
pas possible de vérifier deux fois le formulaire.

callback ~
Pour définir une fonction de 'callback' qui sera appelé si la validation a
réussi, utilisez la méthode 'onvalid', puis 'dovalid' pour lancer le processus
de validation et d'exécution de la fonction de 'callback'. >

  function enregistre( HtmlForm $form )
  {
    // mes instructions
  }

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo')
    ->submit()
    ->onValid('enregistre')
    ->doValid();

IMPORTANT ! ~
Il n'est pas possible de valider un formulaire sans bouton 'submit'.

===============================================================================
TYPES                                                           *Type-de-champ*

Ci-dessous une liste des champs disponibles de base :
- |text| : un champ de texte libre,
- |email| : un champ de saisie pour une adresse mél,
- |dropdown| : une boîte déroulante,
- |country| : une boîte déroulante avec une liste de pays,
- |button| : un bouton,
- |submit| : un bouton pour envoyer le forumaire.
- |radio| : une liste de bouton radio,
- |checkbox| : une case a cocher,
- |checkboxs| : une liste de case a cocher,
- |subscribe| : une case à coché relié à une adresse mél.

===============================================================================
TEXTE                                                                    *text*

Représente un champ de saisie libre correspondant à la syntaxe HTML: >

  <input type="text" name="monChamp" />

Pour ajouter un champ de saisie à votre formulaire utilisez la méthode 'text'
en lui passant le nom du champ en paramètre. >

  $form = HtmlForm::hie('exemple')
    ->text('monChamp');

Ou utilisez la syntaxe suivante : >

  $form = HtmlForm::hie('exemple');
  $form->appendElement( HtmlFormText::hie($form,'monChamp') );

Les propriétés modifiables pour ce champ sont : |Nom-de-champ|,
|Label-de-champ|, |Champ-obligatoire|, |Verification-des-valeurs|,
|Message-d-alerte|, |Nom-exportable| et |Valeur-par-defaut|.

===============================================================================
EMAIL                                                                   *email*

Représente un champ de saisie pour une adresse mél. Le champ 'email' se
présente comme un champ |text| hormis le fait qu'une vérification est effectuée
sur la valeur entrée par le client pour vérifier s.il s'agit bien d'une
adresse mél.

Pour ajouter un champ mél à votre formulaire utilisez la méthode 'email'. >

  $form = HtmlForm::hie('exemple')
    ->email();

Ou utilisez la syntaxe suivante : >

  $form = HtmlForm::hie('exemple');
  $form->appendElement( HtmlFormEmail::hie($form) );

Les propriétés modifiables pour ce champ sont : |Nom-de-champ|,
|Label-de-champ|, |Champ-obligatoire|, |Verification-des-valeurs|,
|Message-d-alerte|, |Nom-exportable| et |Valeur-par-defaut|.

===============================================================================
DROPDOWN                                                             *dropdown*

bientôt...

===============================================================================
PAYS                                                                  *country*

bientôt...

===============================================================================
BUTTON                                                                 *button*

bientôt...

===============================================================================
SUBMIT                                                                 *submit*

bientôt...

===============================================================================
RADIO                                                                   *radio*

bientôt...

===============================================================================
CHECKBOX                                                             *checkbox*

bientôt...

===============================================================================
CHECKBOXS                                                           *checkboxs*

bientôt...

===============================================================================
SUBSCRIBE                                                           *subscribe*

bientôt...

===============================================================================
DECORATEUR                                                         *Decorateur*

HtmlForm propose un décorateur de base nommé 'htmlout'. Cette classe dispose
de deux méthodes statiques pour retourner 'fetch' ou envoyer 'display' le
formulaire généré en HTML. >

  function verif( HtmlForm $form )
  {
    // mes instructions
  }

  $form = HtmlForm::hie('subscribe')
    ->text('name')
    ->text('addresse')
    ->onValid('verif');

  HtmlOut::display( $form );

'htmlout' s'occupe de lancer la vérification du formulaire avant de
l'afficher.

===============================================================================
SMARTY                                                                 *Smarty*

Pour utiliser afficher un formulaire dans 'smarty' il suffit de lui
transmettre une référence de l'objet et d'utiliser la balise 'foreach'. >

  $form = HtmlForm::hie('subscribe')
    ->text('pseudo');

  $smarty = new Smarty;
  $smarty->assign('form', $form);

  ----

  <form name="{$form.name}" method="{$form.method}"
  {foreach item="field" from=$form}

    {if $field.class eq 'HtmlFormText'}
      <input type="text" name="{$field.name" value="{$field.html}" />
      {if $field.error}
        {$field.error}
      {/if}
    {/if}

  {/foreach}
  </form>

Astuces ~
La propriété 'html' de la classe 'htmlformelement' renvoie la valeur envoyée
par le client protégée par la fonction PHP 'htmlspecialchars'.

Les classes filles de 'htmlformselect' implémentent l'interface 'iterator' de la
librarie SPL de PHP, il donc possible d'exécuter l'instruction 'foreach' sur
l'instance de ces classes.

===============================================================================
FORMULAIRE                                            *Parametre-du-formulaire*

La classe formulaire 'htmlform' une fois instanciée dispose de plusieurs
propriétés modifiables :
- 'name' : la valeur de l'attribut 'name' de la balise HTML 'form'.
- 'method' : la valeur de l'attribut 'method' de la balise HTML 'form'.

... ainsi que des méthodes :
- 'setget', 'setpost' : indique d'envoyer les données du formulaire en GET ou
  en POST,
- 'appendelement' : ajoute une instance de 'htmlformelement' dans le
  formulaire,
- 'selectelement' : sélectionne un champ déjà ajouté en temps que champ
  courant,
- 'onvalid' : permet d'ajouter une fonction de 'callback' qui sera exécuté si
  le formulaire est validé,
- 'dovalid' : lance la validation et exécute la fonction de 'callback' si le
  formulaire est validé,
- 'isvalid' : lance la validation et retourne le résultat,
- 'mysqlset' : retourne une portion de requête pour une instruction SQL 'set',
- 'mysqlvalues' : retourne une portion de requête pour une instruction SQL
  'values',
- 'mysqlduplicatevalues' : retourne une portion de requête pour les
  instructions SQL 'duplicate' plus 'update'.

===============================================================================
CHAMPS                                                   *Parametre-des-champs*

Les classes dérivées de 'htmlformelement' une fois instanciée disposent de
plusieurs propriétés modifiables :
- 'name' : la valeur de l'attribut 'name' de la balise correspondante,
- 'required' : le message d'erreur si le champ est manquant,
- 'check' : la liste des vérifications que la valeur du champ doit passer,
- 'map' : la correspondance SQL du nom du champ,
- 'label' : le label du champ,
- 'alert' : le message ou la liste des messages d'alerte en cas d'erreur,
- 'id' : un champ unique - invariable si le champ possède un nom -,
- 'error' : l'état de validation du champ et son message d'erreur,
- 'value' : la valeur envoyée par le client,
- 'html' : la valeur envoyée par le client protégé,
- 'class' : le nom de la classe du champ.

... ainsi que des méthodes :
- 'setname', 'setrequired', 'setcheck', 'setmap', 'setalert', 'setid' :
  permettent de modifier les propriétés correspondantes.

===============================================================================
MYSQL                                                            *Export-MySQL*

En plus de gérer les entrées/sorties d'un formulaire HtmlForm propose de
rédiger les portions de requête 'mysql' souvent laborieuse avec une grande
quantité de champs. >

  http://mon.domaine/form.php?name=Martin&address=102+missile+fixe

  ----

  $form = HtmlForm::hie('subscribe')->setGet()
    ->text('name')
    ->text('address');

  echo $form->mysqlSet();
  // affichera : SET `name`='Martin', `address`='102 missile fixe'

Les méthodes disponibles sont les suivantes :
- 'mysqlset' : à utiliser avec l'instruction 'set' de 'insert', 'replace'
  ou 'update',
- 'mysqlvalues' : à utiliser avec l'instruction 'values' de 'insert', 'replace'
  ou 'update',
- 'mysqlduplicatevalues' : à utiliser après l'instruction :
  ON DUPLICATE KEY UPDATE.

Ces trois paramètres prennent un paramètre optionnel qui servira pour
l'échappement des caractères. Il peut être :
- une ressource 'mysql',
- une instance de 'mysqli',
- une instance d'un objet possédant une méthode 'escape'.

Si ce paramètre n'est pas fourni, HtmlForm cherchera à ouvrir une connexion
avec le serveur MYSQL.

Si l'échappement n'a pas pu être effectué, les méthodes retourneront 'false'.

===============================================================================
AUTRE CHAMPS                                                    *Plus-de-champ*

Pour créer de nouveau champ spécifiques, il suffit d'étendre l'une des classes
suivante :
- 'htmlformtext' : champ de saisie de type <input>,
- 'htmlformdropdown' : liste déroulante de type <select>,
- 'htmlformradio' : liste de champ de type <input> 'radio',
- 'htmlformcheckbox' : case a cocher de type <input> 'checkbox',
- 'htmlformcheckboxs' : liste de case a cocher de type <input> 'checkbox',
- 'htmlformbutton' : bouton de type <button>,
- 'htmlformsubmit' : bouton de type <input> 'submit'. >

  class MySelect extends HtmlFormSelect
  {
    protected $name = 'MySelect';

    protected function init( HtmlForm $form )
    {
      parent::init( $form );
    
      // mes instructions
    }
  }

ATTENTION ! ~
Dans la méthode 'init' utilisez les méthodes 'setxxx' pour modifier les
propriétés. >

Regardez le code de 'htmlformcountry' pour un exemple concret.

===============================================================================
AUTRE DECORATEURS                                          *Plus-de-decorateur*

Pour créer de nouveau décorateur, il suffit d'implémenter l'interface
'htmloutinterface' qui déclare deux méthodes :
- 'fetch' : retourne le code HTML du formulaire,
- 'display' : affiche le code HTML du formulaire. >

  class MyDecorator implements HtmlOutInterface
  {
    public function display( HtmlForm $form )
    {
      // mes instructions
    }

    public function fetch( HtmlForm $form )
    {
      // mes instructions
    }
  }

-------------------------------------------------------------------------------
vim:tw=78:noet:wrap:ts=8:ft=help:norl: