Génération du site web de l'ULB - format xml
sommairesommaireindexindexpage précédentepage précédentepage suivantepage suivanteimprimerimprimerenvoyerenvoyermarquermarquer

Formulaires: <formulaire>

Un formulaire se définit à l'aide d'un élément <formulaire> (ou du synonyme <form>). Cet élément peut contenir n'importe quels contenus et éléments de mise en page, mélangés avec:


  • des champs de saisie, implémentés par des éléments <input> de différents types: champs de saisie de texte, cases à cocher, boutons de type radio, listes déroulantes, etc.;

  • des boutons, implémentés par des éléments <bouton>.


Les boutons servent à déclencher des actions de différents types: <action> pour envoyer les données récoltées par le formulaire à une application, <interaction> pour déclencher des actions éventuellement en provenance d'une application, <mail> pour envoyer ces données par mail, <record> pour enregistrer ces données dans une base de données (exportable par la suite en Excel, par exemple), etc.

Quand un bouton est activé, les données introduites dans les différents champs sont tout d'abord éventuellement formatées puis validées.

Ce sont des éléments particuliers, à utiliser dans les éléments <input>, qui détermineront comment formater (éliminer les espaces inutiles, mettre en majuscule/minuscule, etc.) et comment valider (obliger d'entrer une valeur, vérifier que cette valeur est numérique, imposer un nombre de choix minimum et/ou maximum, etc.).

Si la validation est négative, le libellé des questions erronées sera mis en rouge et des messages d'erreurs affichés.

Si la validation est positive, les données seront récoltées et traitées suivant l'action qui a été définie. Ces données prendront la forme d'une liste de paramètres qui sera envoyée à l'application associée à cette action.

Ces paramètres sont également accessibles au reste de la page, grâce à l'ensemble de paramètres lié au formulaire.


Exemple de formulaire

Dans cet exemple, un élément <formulaire> sert à définir un formulaire. Le résultat est visible dans la colonne de droite.

Comme on le voit, cet élément se comporte comme un bloc et peut donc être mis en forme comme un bloc (avec les attributs style, bords...).

Il peut contenir un ensemble d'éléments d'information dans une page (des titres, des paragraphes, des images...) mélangés avec des éléments <input> et <bouton>.

Exemple
<formulaire style="voile" bords="arrondis">
   <action href="http://www.ulb.ac.be/sitemanagerapps/samples/dumpform.php" méthode="post"/>

   <p>Veuillez remplir les champs suivants:</p>
   <input>
      <nom>nom</nom>
      <libellé>nom et prénom</libellé>
   </input>

   <input>
      <nom>e-mail</nom>
      <libellé>adresse e-mail</libellé>
   </input>

   <bouton>
      <nom>ok</nom>
      <libellé>envoyer</libellé>
   </bouton>
</formulaire>

L'élément <action> utilisé dans l'exemple ci-dessus mentionne l'adresse de l'application à qui sont destinées les données récoltées par le formulaire. Il donne également la méthode à utiliser pour envoyer ces données, grâce à l'attribut méthode (ou son synonyme method). Cet attribut peut valoir post ou get, comme en html.

Veuillez remplir les champs suivants:

Nom et prénom:

Adresse e-mail:


Les actions

Différents types d'action peuvent être déclenchées lorsque l'utilisateur clique sur un bouton du formulaire, grâce à un des sous-éléments suivants (à placer tout au début de l'élément <formulaire>):


  • <action>, pour envoyer les données à une application, qui sera appelée avec les paramètres récoltés par le formulaire. En règle générale, cette application va renvoyer une réponse sous la forme d'une page html qui sera affichée en lieu et place de la page web qui contient le formulaire. Ce type d'action est similaire à celui utilisé en html;

  • <interaction>, pour déclencher des actions définies par cet élément. Ces actions peuvent provenir d'une application, qui sera appelée avec les paramètres récoltés par le formulaire. Contrairement à <action> la page web qui contient le formulaire n'est pas remplacée par une autre page. Les actions renvoyées par l'application peuvent servir à modifier son contenu (par exemple, faire disparaître le formulaire et afficher à la place un message de confirmation provenant de l'application distante);

  • <mail>, pour envoyer les données récoltées dans le formulaire par mail. Après l'envoi, vous avez la possibilité de faire afficher une nouvelle page dans le navigateur (avec, par exemple, un message de confirmation indiquant que l'envoi s'est bien déroulé) ou de laisser la page qui contient le formulaire affichée et, éventuellement, déclencher des actions afin de modifier son contenu;

  • <record>, pour enregistrer les données récoltées par le formulaire dans une base de données. Après l'enregistrement, vous avez la possibilité de faire afficher une nouvelle page dans le navigateur (avec, par exemple, un message de confirmation indiquant que l'enregistrement s'est bien déroulé) ou de laisser la page qui contient le formulaire affichée et, éventuellement, déclencher des actions afin de modifier son contenu;

  • <test>, pour envoyer les données à une application de test qui ne fait rien d'autre que d'afficher le contenu du formulaire; En règle générale, cette application va renvoyer une réponse sous la forme d'une page html qui sera affichée en lieu et place de la page web qui contient le formulaire.


Ces actions peuvent être combinées (par exemple, réaliser l'envoi des données par mail, l'enregistrement de ces données dans une base de données et terminer par l'envoi d'un message de confirmation à la personne qui a rempli le formulaire).

Il est également possible de définir plusieurs groupes d'actions dans le même formulaire. Chaque bouton pourra déclencher l'une ou l'autre de ces groupes.


Les champs

Différents types de champ peuvent être utilisés au sein du formulaire, grâce à des sous-éléments <input> dont l'attribut type définit le type en question:


Déclencher l'envoi du formulaire par un bouton

Une action ou un groupe d'actions du formulaire peut être déclenché via un bouton, ce qui provoque généralement l'envoi des données récoltées par le formulaire à une application. Un bouton est défini grâce à un élément:

  • <bouton>: bouton clickable affichant un libellé (envoyer, enregistrer...)

  • <button>: synonyme de <bouton>.

Si plusieurs groupes d'actions existent dans le même formulaire, l'élément <bouton> utilisera un attribut action="xxx" pour désigner le groupe d'actions à déclencher.


Exemple
<formulaire>
   <test/>

   <input>
      <nom>nom</nom>
      <libellé>nom et prénom</libellé>
   </input>

   <bouton>
      <nom>ok</nom>
      <libellé>envoyer</libellé>
   </bouton>
</formulaire>

Nom et prénom:


Déclencher l'envoi du formulaire via une action

Une action ou un groupe d'actions du formulaire peut également être déclenché via une action envoyer, utilisée dans un lien hypertexte par exemple.

Si plusieurs groupes d'actions existent dans le même formulaire, l'action envoyer:xxx désignera le groupe d'actions à déclencher.

Exemple
<formulaire>
   <test/>
						
   <input>
      <nom>nom</nom>
      <libellé>nom et prénom</libellé>
   </input>
						
   <p><a cible="envoyer">envoyer le formulaire</a></p>
</formulaire>

Nom et prénom:

envoyer le formulaire


Style d'un formulaire

Un formulaire est considéré comme un bloc. Tous les attributs (style, bords et ses variantes, ajuster-hauteur...) définis pour les blocs peuvent être utilisés, ainsi que l'élément <titre>.

En voici quelques exemples:

Exemple
<formulaire bords="arrondis" style="colorBar6">
   ...
</formulaire>
	
				

Veuillez remplir les champs suivants:

Nom et prénom:

Adresse e-mail:


Exemple
<formulaire bords="carrés" style="colorBar4">
   <titre>
      <titre2>Formulaire à remplir</titre2>
   </titre>
   ...
</formulaire>
		
				
Formulaire à remplir

Veuillez remplir les champs suivants:

Nom et prénom:

Adresse e-mail:



Exemple
<formulaire bords="arrondis" style="voile">
   ...
</formulaire>
		
				

Veuillez remplir les champs suivants:

Nom et prénom:

Adresse e-mail:



Style des questions dans un formulaire

Chaque élément <input> implémentant une question est également considéré comme un bloc. Tous les attributs (style, bords et ses variantes, ajuster-hauteur...) définis pour les blocs peuvent être utilisés, sauf l'élément <titre> (qui n'a pas d'utilité ici).

En voici quelques exemples:

Exemple
<formulaire>						
   <action href="http://www.ulb.ac.be/sitemanagerapps/samples/dumpform.php" méthode="post"/>
   <p>Veuillez remplir les champs suivants:</p>
   <input bords="carrés" style="colorBar6">
      <nom>nom</nom>
      <libellé>nom et prénom</libellé>
   </input>
   <input bords="carrés" style="colorBar6">
      <nom>e-mail</nom>
      <libellé>adresse e-mail</libellé>
   </input>
   <bouton>
      <nom>ok</nom>
      <libellé>envoyer</libellé>
   </bouton>
</formulaire>					
	
				

Veuillez remplir les champs suivants:

Nom et prénom:

Adresse e-mail:


Exemple
<formulaire bords="arrondis" style="voile">
   <action href="http://www.ulb.ac.be/sitemanagerapps/samples/dumpform.php" méthode="post"/>
   <p>Veuillez remplir les champs suivants:</p>
   <input bords="arrondis" style="colorBar6">
      <nom>nom</nom>
      <libellé>nom et prénom</libellé>
   </input>
   <input bords="arrondis" style="colorBar6">
      <nom>e-mail</nom>
      <libellé>adresse e-mail</libellé>
   </input>
   <bouton>
      <nom>ok</nom>
      <libellé>envoyer</libellé>
   </bouton>
</formulaire>
	
				

Veuillez remplir les champs suivants:

Nom et prénom:

Adresse e-mail:


Grouper les questions et/ou les boutons sur une même ligne

Par défaut, les questions et les boutons se mettent les uns en dessous des autres (sur des lignes séparées).

Il peut s'avèrer utile de regrouper certaines questions et/ou boutons sur la même ligne. Il faut pour cela utiliser un élement <groupe> et y placer les <input> et les <bouton> que l'on veut grouper.

Comme tout s'écrit sur la même ligne, il faut veiller à ce que les libellés les commentaires éventuels ne soient pas trop longs afin de ne pas perturber la mise en page du formulaire.


Exemple
<formulaire>
   <action href="http://www.ulb.ac.be/sitemanagerapps/samples/dumpform.php" méthode="post"/>
   <groupe>
      <input bords="carrés" style="colorBar6">
         <nom>nom</nom>
         <libellé>nom et prénom</libellé>
      </input>
      <input bords="carrés" style="colorBar6">
         <nom>e-mail</nom>
         <libellé>adresse e-mail</libellé>
      </input>
      <bouton>
         <nom>ok</nom>
         <libellé>envoyer</libellé>
      </bouton>
   </groupe>
</formulaire>				

Ce qui donne:


Nom et prénom:

Adresse e-mail:



Si vous groupez les questions, l'attribut style et les autres attributs de bloc que vous mettez sur les éléments <input> seront ignorés. Par contre vous pouvez les déplacer au niveau de l'élément <groupe>.

Exemple
<formulaire>
   <action href="http://www.ulb.ac.be/sitemanagerapps/samples/dumpform.php" méthode="post"/>
   <groupe style="colorBar5" bords="arrondis">
      <titre>
         <titre1 toc="non">Entrez vos coordonnées</titre1>
      </titre>
      <input>      
         <nom>nom</nom>
         <libellé>nom et prénom</libellé>
      </input>
      <input>
         <nom>e-mail</nom>
         <libellé>adresse e-mail</libellé>
      </input>
      <bouton>
         <nom>ok</nom>
         <libellé>envoyer</libellé>
      </bouton>
   </groupe>
</formulaire>				

Ce qui donne:


Entrez vos coordonnées

Nom et prénom:

Adresse e-mail:



Questions optionnelles

Les questions étant considérées comme des blocs, elles peuvent se comporter comme des sections optionnelles et peuvent donc apparaître ou disparaître suivant l'état d'une option.

Comme cette option peut être activée ou désactivée à partir du formulaire (à l'aide d'une liste déroulante, de boutons radio ou de cases à cocher), il est facile de réaliser des formulaires dynamiques où des questions apparaissent ou disparaissent en fonction des réponses antérieures.

Si la question est cachée à l'utilisateur, le comportement par défaut est de ne pas tenir compte de cette question dans le formulaire (la question ne sera pas validée, et les paramètres qui lui sont liée ne seront pas envoyés). Vous pouvez modifier ce comportement par défaut.

Dans cet exemple, le formulaire contient une première question (de type oui/non) qui permet d'activer une option "publication:oui" si la réponse est positive (grâce à l'attribut activer-option).

La deuxième question ne sera affichée que si l'option "publication:oui" est active (grâce à l'attribut options qui la transforme en section optionnelle).

Exemple
<formulaire bords="arrondis" style="colorBar5">
   <input type="radio">
      <nom>publication</nom>
      <libellé>Je désire recevoir cette publication</libellé>
      <option valeur="oui" activer-option="oui">oui</option>
      <option valeur="non">non</option>
   </input>

   <input type="checkbox" options="publication:oui">
      <nom>format</nom>
      <libellé>Je désire la recevoir</libellé>				   	  	
      <option valeur="papier">via la poste</option>
      <option valeur="email">via email</option>
   </input>
</formulaire>

Je désire recevoir cette publication:

oui

non


Une autre manière de procéder, encore plus simple, consiste à utiliser des options avec un libellé et un contenu. Ce contenu ne sera visible que si l'option est sélectionnée; il peut contenir tout ce qu'un bloc peut contenir, et notamment une partie des questions du formulaire à remplir.

Dans cet exemple, la première option est constitué d'un libellé ("oui") et d'un contenu composé d'une deuxième question <input>. Cette deuxième question ne sera visible que si l'option "oui" est sélectionnée.

Exemple
<formulaire bords="arrondis" style="colorBar5">
   <input type="radio">
      <nom>publication</nom>
      <libellé>Je désire recevoir cette publication</libellé>
      <option valeur="oui">
         <libellé>oui</libellé>
         <input type="checkbox" options="oui">
            <nom>format</nom>
            <option valeur="papier">via la poste</option>
            <option valeur="email">via email</option>
         </input>         
      </option>
      <option valeur="non">non</option>
   </input>   
</formulaire>

Je désire recevoir cette publication:

oui

non


Contrôler le formulaire et son contenu via des actions

Outre l'action envoyer citée plus haut, il existe d'autres actions permettant de contrôler le formulaire ainsi que son contenu.

Ces actions peuvent s'utiliser dans le formulaire (par exemple en réaction à une action de l'utilisateur: lorsqu'il clique sur un bouton, lorsqu'il sélectionne une option, etc.), ou en dehors du formulaire (par exemple en cliquant sur un lien hypertexte).

Certaines s'appliquent sur l'ensemble du formulaire, d'autres sur un champ en particulier.

Elles permettent, entre-autres:

  • de formatter et de valider le contenu du formulaire, en affichant éventuellement des messages d'erreur

  • de réinitialiser le formulaire, en supprimant notamment l'affichage des messages d'erreur

  • de modifier le contenu des champs du formulaire et/ou de la valeur par défaut associée à ces champs

  • de recharger les champs avec leur valeur par défaut

  • de déclencher l'envoi du formulaire


Pour plus d'information, consultez la liste des actions possibles.


Dans cet exemple, les deux zones de saisies de texte du formulaire seront vides par défaut. Une table des matières vous permet d'effacer le contenu du formulaire (en rechargeant la valeur par défaut grâce à l'action recharger), de pré-remplir le formulaire avec des données de test (grâce aux actions modifier) ou de le pré-remplir avec vos coordonnées en provenance de l'Intranet (avec les mêmes actions).

Exemple
<formulaire ancre="f" bords="arrondis" style="colorBar5">
   <test/>
   
   <input type="text">
      <nom>nom</nom>
      <libellé>votre nom</libellé>
      <valeur></valeur>
   </input>
   
   <input type="text">
      <nom>prenom</nom>
      <libellé>votre prénom</libellé>
      <valeur></valeur>
   </input>
   
   <bouton>
      <libellé>envoyer</libellé>
   </bouton>
   
   <toc>
      <toc1 cible="recharger:f">effacer</toc1>
      <toc1 cible="modifier:f:nom=Lampion,modifier:f:prenom=Séraphin">
        charger des données de test
      </toc1>
      <section options="intranet">
         <toc1 cible="modifier:f:nom={intranet:nom},modifier:f:prenom={intranet:prénom}">
           charger vos données de l'Intranet
         </toc1>
      </section>
   </toc>
</formulaire>

Votre nom:

Votre prénom:


Pré-remplissage du formulaire

Chaque élément <input> peut avoir une valeur par défaut, donnée par un élément <valeur>, qui servira à pré-remplir le formulaire lorsque la page sera affichée.

Dans cet exemple, les deux zones de saisies de texte du formulaire seront pré-remplies avec les valeurs "Lampion" et "Séraphin".

Exemple
<formulaire bords="arrondis" style="colorBar5">
   <test/>

   <input type="text">
      <nom>nom</nom>
      <libellé>votre nom</libellé>
      <valeur>Lampion</valeur>
   </input>

   <input type="text">
      <nom>prenom</nom>
      <libellé>votre prénom</libellé>
      <valeur>Séraphin</valeur>
   </input>
   
   <bouton>
      <libellé>envoyer</libellé>
   </bouton>
</formulaire>

Votre nom:

Votre prénom:


Données paramétrables

Le contenu de l'élément <valeur> peut faire appel à des paramètres, écrits sous la forme "{xxxx:yyyy}".

Dans cet exemple, la valeur par défaut contiendra l'identificateur de la langue ("fr", "en" ou "nl") dans laquelle la page est écrite, donnée par le paramètre "{page:lang}". Cet identificateur permet de pré-sélectionner par défaut une option particulière dans la liste déroulante.

Exemple
<formulaire bords="arrondis" style="colorBar5">
   <test/>
   
   <input type="select">
      <nom>langue</nom>
      <libellé>vous désirez une documentation en</libellé>
      <valeur>{page:lang}</valeur>
      <option valeur="en">anglais</option>
      <option valeur="fr">français</option>
      <option valeur="nl">néerlandais</option>
   </input>
   
   <bouton>
      <libellé>envoyer</libellé>
   </bouton>
</formulaire>

Vous désirez une documentation en:

Données paramétrables provenant de l'Intranet

Si votre page est protégée par l'Intranet de l'ULB, il est facile de pré-remplir le formulaire avec les informations disponibles sur la personne connectée (matricule, nom, prénom...).

Pour cela, il suffit de donner une valeur par défaut aux zones que vous désirez préremplir et d'utiliser dans cette valeur des paramètres correspondant aux informations de l'intranet ({intranet:matricule}, {intranet:nom}, {intranet:prénom}...).


Dans cet exemple, le formulaire sera pré-rempli avec vos informations personnelles provenant de l'Intranet. Pour pouvoir utiliser ces données, le formulaire doit être placé dans une section optionnelle sous le contrôle d'une option pilotée par l'Intranet. C'est chose faite avec l'attribut options="intranet" placé sur l'élément <formulaire>.

Le formulaire ne sera donc pas visible si vous n'êtes pas connecté à l'Intranet.

Exemple
<options>
   <option id="intranet">
      <connexion/>
   </option>   
   <option id="no-intranet">
      <hors-connexion/>
   </option>   
</options>

...

<bloc bords="arrondis" style="important" options="no-intranet">
   <p>
      <a cible="intranet:login">Connectez-vous</a> à l'intranet pour voir cet exemple fonctionner
   </p>
</bloc>

<formulaire bords="arrondis" style="colorBar5" options="intranet">
   <input type="text">
      <nom>matricule</nom>
      <libellé>votre matricule</libellé>
      <valeur>{intranet:matri}</valeur>
   </input>
						
   <input type="text">
      <nom>nom</nom>
      <libellé>votre nom</libellé>
      <valeur>{intranet:nom}</valeur>
   </input>

   <input type="text">
      <nom>prenom</nom>
      <libellé>votre prénom</libellé>
      <valeur>{intranet:prénom}</valeur>
   </input>

   <input type="text">
      <nom>email</nom>
      <libellé>votre adresse e-mail</libellé>
      <valeur>{intranet:email}</valeur>
   </input>
</formulaire>	
					
					
				

Si vous voulez quand même pouvoir utiliser le formulaire, même si vous n'êtes pas connecté à l'Intranet, vous pouvez ne pas pré-remplir directement le formulaire avec les données de l'Intranet, mais le faire indirectement via un élément <interaction> intermédiaire.

Cet élément interaction sera déclenché au moment du chargement de la page. Il exécutera des actions modifier afin de remplir les champs avec les données provenant de l'Intranet. Ces actions ne seront exécutées que si ces données sont reçues par l'Intranet. Dans le cas contraire, le formulaire sera bien affiché, mais les champs resteront vides.

Exemple
<options>
   <option id="intranet">
      <connexion/>
   </option>   
   <option id="no-intranet">
      <hors-connexion/>
   </option>   
</options>

...

<section options="intranet">
   <interaction>
      <actions exécuter="démarrage">
         modifier:f1:matricule={intranet:matri}
         modifier:f1:nom={intranet:nom}
         modifier:f1:prenom={intranet:prénom}
         modifier:f1:email={intranet:email}
      </actions>   
   </interaction>
</section>

<formulaire ancre="f1" bords="arrondis" style="colorBar5">
   <input type="text">
      <nom>matricule</nom>
      <libellé>votre matricule</libellé>
   </input>
						
   <input type="text">
      <nom>nom</nom>
      <libellé>votre nom</libellé>
   </input>
   
   <input type="text">
      <nom>prenom</nom>
      <libellé>votre prénom</libellé>
   </input>
   
   <input type="text">
      <nom>email</nom>
      <libellé>votre adresse e-mail</libellé>
   </input>
</formulaire>	
					
					
				

Votre matricule:

Votre nom:

Votre prénom:

Votre adresse e-mail:


Ensemble de paramètres lié au formulaire

Chaque formulaire est lié à un ensemble de paramètres. Ces paramètres contiennent les valeurs encodées dans le formulaire (consultez la liste des paramètres récoltés par le formulaire).

Par défaut, cet ensemble de paramètres s'appelle form et n'est accessible qu'à l'intérieur de la balise <formulaire> (une action, par exemple, qui envoie par mail le contenu du formulaire pourra construire le sujet et le corps du message à envoyer en utilisant les paramètres en question).

Vous pouvez également lui donner un nom, en utilisant un attribut set="xxxx" à placer sur l'élément <formulaire>. Dans ce cas, cet ensemble de paramètres pourra s'utiliser également à l'aide de ce nom, tant à l'intérieur qu'à l'extérieur de la balise <formulaire> (à l'intérieur du formulaire, les noms form et xxxx pourront indifféremment être utilisés).

Un paramètre yyyy (lié, par exemple, à une zone de saisie de texte dont le <nom> est égal yyyy) s'écrira:

  • {xxxx:yyyy} à l'extérieur du formulaire

  • {xxxx:yyyy} ou {form:yyyy} à l'intérieur du formulaire


Dans cet exemple, le formulaire est lié à un ensemble de paramètres fset (grâce à l'attribut set="fset"). Il contient une zone de saisie de texte dont le paramètre est prénom.

Deux liens sont utilisés, l'un à l'intérieur du formulaire, l'autre à l'extérieur du formulaire, pour afficher une boite de dialogue grâce à l'action alerte(...).

Le premier lien affiche la valeur de la zone de saisie de texte grâce à {form:prénom}. Le deuxième fait pareil grâce à {fset:prénom}.

Exemple
<formulaire bords="arrondis" style="colorBar5" options="intranet" set="fset">
   <input type="text">
      <nom>prénom</nom>
      <libellé>votre prénom</libellé>
      <valeur>Séraphin</valeur>
   </input>
   <p><a cible="alerte(hello {form:prénom})">hello</a> (dans le formulaire)</p>
</formulaire>

<p><a cible="alerte(hello {fset:prénom})">hello</a> (extérieur au formulaire)</p>

hello (extérieur au formulaire)

ULB - entreprise écodynamique