Documentation en ligne

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.

Dernière mise à jour le 24/06/2021 14:40 — Éditer