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:
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. |
Les actionsDiffé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>):
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 champsDiffé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 boutonUne 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:
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> |
Déclencher l'envoi du formulaire via une actionUne 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> |
Style d'un formulaireUn 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> |
Exemple <formulaire bords="carrés" style="colorBar4"> <titre> <titre2>Formulaire à remplir</titre2> </titre> ... </formulaire> |
Exemple <formulaire bords="arrondis" style="voile"> ... </formulaire> |
Style des questions dans un formulaireChaque é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> |
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> |
Grouper les questions et/ou les boutons sur une même lignePar 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: 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: Questions optionnellesLes 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> |
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> |
Contrôler le formulaire et son contenu via des actionsOutre 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:
|
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> |
Pré-remplissage du formulaireChaque é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> |
Données paramétrablesLe 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> |
Données paramétrables provenant de l'IntranetSi 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> |
Ensemble de paramètres lié au formulaireChaque 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:
|
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) |