Créer un formulaire conditionnel
Les formulaires conditionnels permettent de rendre un formulaire dynamique, d'afficher ou non certaines pages en fonction des réponses de l'utilisateur à certaines questions. L'affichage des pages peut en effet être soumis à des « conditions ». Ces conditions sont remplies, ou non, en fonction des réponses de l'utilisateur.
Exemple de formulaire conditionnel : si l'usager répond « non » à la question « Possédez-vous un véhicule ? », je ne vais pas lui afficher la page de formulaire concernant la description du véhicule.
Nom de variables
Champs d'un formulaire
Les variables sont construites sur la base des identifiants que l'on peut donner à chaque champ. Attribuer un identifiant est indispensable s'agissant d'un champ qui va être utilisé pour conditionner l'affichage d'une page. On utilisera en effet la variable (de la forme form_var_identifiant) pour écrire la condition décidant de l'affichage de la page en question.
Les intitulés des variables sont soumis à des règles, ils peuvent contenir des chiffres ou des lettres, sans caractères spéciaux à l'exception du caractère underscore (on remplace généralement les espaces par le caractère underscore : "_").
Hors champs
En dehors des champs des formulaires utilisés pour créer des démarches, il existe un grand nombre de variables (qui peuvent aussi être utilisées dans les conditions), comme par exemple les données du profil d'un usager. Elles sont d'un maniement souvent plus complexe que les simples variables de champs et réservées à un usage avancé.
Pages conditionnelles
Les champs de type « Nouvelle page » sont les seuls à posséder une option particulière - accessible lorsqu'on les édite - « Condition » . C'est dans ce champ que l'on va écrire la règle décidant si cette page doit être affichée ou non.
Nous avons vu que l'on pouvait attribuer un identifiant à un champ, la variable, construite sur la base de l'identifiant, peut être utilisée pour écrire la condition d'affichage de la page. La condition s'écrira alors selon la forme suivante : form_var_identifiant == "libellé du choix"
Respectez la casse !
La casse est importante (majuscule / minuscule). Si vous ne la respectez pas dans l'écriture de la condition, cela ne fonctionnera pas.
Il est nécessaire d'ajouter, avant l'identifiant, le préfixe « form_var_ » et d'utiliser un opérateur comme == (qui signifie « égal à »). Enfin il faut faire figurer, entre guillemets, la valeur exacte (respect de la casse et de l'accentuation) de la réponse attendue pour que la condition soit respectée.
Si la réponse de l'utilisateur correspond à celle qui figure dans la condition, la page est affichée, dans le cas inverse elle ne l'est pas.
Exemple : si l'identifiant du champ « Possédez-vous un véhicule ? » est « vehicule » et que je veux que la page s'affiche quand la réponse est « Oui », la condition s'écrira form_var_vehicule == "Oui"
Remarque : si plusieurs lignes de condition sont complétées alors chacune des lignes doit être vérifiée.
Cases à cocher
Ce qui précède s'applique aux champs de type liste. Concernant les champs de type case à cocher, ils ne prennent que deux valeurs « True » (quand la case est cochée) et « False » (quand la case est décochée).
En reprenant l'exemple de la page concernant un véhicule mais avec une case à cocher ayant comme identifiant « vehicule », la condition s'écrira form_var_vehicule == "True"
Liste à choix multiples
Dans ce cas, la condition s'écrira "bleu" in form_var_vehicule ; si besoin de plus d'informations, référez-vous à utiliser les conditions.
Utilisation d'opérateur avancés
Nous avons vu des conditions simples, permettant de tester une réponse unique. Mais il est possible d'aller plus loin.
Nous nous basons, dans les exemples qui suivent, sur la syntaxe Django, qui est celle qui devra être utilisée par défaut. Historiquement, les conditions étaient écrites en langage Python. Vérifiez que c'est bien la syntaxe Djanqo qui est sélectionnée dans votre condition (à côté de l'engrenage), si vous souhaitez utiliser ces exemples.
Les opérateurs avancés permettent de faire des conditions plus subtiles telle, « je veux cette réponse ET cette réponse » ou encore, « je veux cette réponse OU cette réponse » pour déclencher l'affichage de la page :
- and : permet d'écrire une condition dans laquelle les deux propositions liées par le and doivent être vraies pour déclencher l'affichage de la page.
- or : permet d'écrire une condition dans laquelle une, au moins, des deux propositions liées par le or doit être vraie pour déclencher l'affichage de la page.
- not : permet d'écrire une condition dans laquelle la proposition qui suit le not ne doit pas être vraie pour déclencher l'affichage de la page
- in "ELEMENT1 ELEMENT2"|split : permet d'écrire une condition dans laquelle la variable doit contenir un des éléments de la liste pour que la condition soit vraie et déclenche l'affichage de la page.
- != : signifie "différent de", permet d'écrire une condition dans laquelle les propositions de part et d'autre de l'opérateur ne doivent pas être égales pour que la condition soit vraie et déclenche l'affichage de la page.
- <, >, <=, >= : opérateurs de comparaison numériques. Inférieur, supérieur, inférieur ou égal, supérieur ou égal. Pour pouvoir utiliser ces opérateurs, il faut transformer sa variable en nombre grâce au filtre |decimal.
Exemples
- form_var_vehicule == "Oui" or form_var_achat_vehicule == "Oui" va déclencher l'affichage de la page consacrée aux véhicules si l'utilisateur a indiqué qu'il avait un véhicule ou s'il a dit qu'il allait en acheter un (identifiant : « achat_vehicule »).
- form_var_jour != "jeudi" : signifie « différent de ». Le jour ne doit pas être jeudi pour que la condition soit vérifiée.
- form_var_couleur in "Bleu Rose Vert"|split : si la réponse est une des valeurs entre guillemets, la condition sera vérifiée.
- form_var_nombre_de_reservations|decimal > 1 : À partir de deux réservations, la condition sera vérifiée.
- form_var_inscription_newsletter == "False" or form_var_courriel : si on souhaite s'inscrire à la newsletter, le champ courriel devient obligatoire
Conditions en sortie de page
Les conditions évoquées jusqu'alors permettent de provoquer l'affichage ou non d'une page. Mais les champs de type « Nouvelle page » permettent également d'écrire des conditions « en sortie de page », c'est-à-dire des conditions qui si elles ne sont pas vérifiées empêcheront le passage à la page suivante. Lorsque l'on écrit une condition de sortie de page, il faut impérativement l'accompagner d'un message d'erreur significatif pour l'usager, ce message d'erreur sera affiché lorsque la condition ou les conditions ne sont pas satisfaites (et il est alors impossible pour l'usager de passer à l'étape suivante de la démarche, jusqu'à ce qu'il apporte les corrections nécessaires).
- Exemple 1 : avec une condition de sortie de page ainsi rédigée « form_var_courriel1 == form_var_courriel2 », la page concernée ne pourra être validée que si les adresses électroniques saisies dans les deux champs portant ces identifiants sont identiques.
- Exemple 2 : une condition de sortie de page « form_var_tel1 or form_var_tel2 », vérifiera qu'au moins un des deux champs a été complété. Le message d'erreur à associer si la condition n'est pas remplie pourrait être : « Veuillez saisir au moins un n° de téléphone », par exemple.
- Exemple 3 : une condition de sortie de page « "fontenay" in form_var_ville|lower » sera vraie si la chaîne de caractères « fontenay » ou « Fontenay-Sous-Bois » ou « FONTENAY » est saisie dans le champ « form_var_ville ». Le filtre |lower transforme en effet le contenu de la variable en minuscules. Le message d'erreur à associer si la condition n'est pas remplie pourrait être par exemple : « Votre signalement doit nécessairement concerner le territoire de la commune de Fontenay ».
Plusieurs conditions de sorties sont possibles cumulativement via « Ajouter une ligne », dans ce cas toutes les conditions doivent être respectées (équivalent d'un « and» si l'expression était rédigée sur une seule ligne). Tous les exemples donnés sur cette page utilisent des variables issues d'un formulaire et les conditions uniquement dans les champs page. Mais il y a d'autres endroits ou l'on peut utiliser les conditions et d'autres variables disponibles.