Nouvelle page

Composition de formulaires multi-pages

Le champ "Nouvelle page" permet de générer un formulaire multi-pages.

Autrement dit, le champ "Nouvelle page" permet de regrouper et d'afficher par page, un ensemble de champs à saisir.

Pour ce faire, le champ "Nouvelle page" doit précéder les champs du (télé)formulaire censés appartenir à cette page.

Pour marquer la pagination des champs, que ce soit sur la page d'édition des champs" ou dans l'aperçu du (télé)formulaire visualisable sur la page "Détail" de ce (télé)formulaire, le champ "Nouvelle page" se distingue des autres champs par sa mise en forme, dont le retrait est accentué par rapport aux champs qui composent la page.

Sur le Portail Citoyen-Usager, chacune des pages du (télé)formulaire est signalée par son libellé, en marge du (télé)formulaire, pour fournir aux usagers (et agents d'accueil) une vue d'ensemble des pages du (télé)formulaire et leur indiquer leur progression parmi celles-ci.

Propriétés spécifiques du champ "Nouvelle page"

Condition

Dans certaines situations de saisie d'un (télé)formulaire, il n'est pas toujours nécessaire de soumettre à la saisie toutes ses pages.

Inutile par exemple de présenter une page précisant les modalités d'accès à un parking si l'usager a indiqué, dans une page précédente, qu'il n'est pas en possession d'un permis de conduire.

Publik offre la possibilité de conditionner l'affichage des pages d'un (télé)formulaire en fonction de la valeur d'un des champs de saisie du (télé)formulaire de la démarche encodé par l'usager ou d'un des champs du profil de l'usager.

Pour attribuer à un champ le pouvoir de conditionner l'affichage d'une page en fonction de sa valeur, il faut le doter d'un identifiant. C'est le paramètre avancé nom de variable du champ à saisir qui servira dont la valeur servira de condition qui le permet.

Les noms de variable sont soumis à des règles syntaxiques: ils ne doivent contenir que des chiffres et/ou des lettres minuscules. Les caractères spéciaux sont proscrits, y compris les espaces, généralement remplacés par des "_" (underscore).

Une condition peut alors s'exprimer sous la forme d'une "formule Python" dont la syntaxe diffère légèrement selon que la condition dépend d'une donnée du formulaire ou d'une donnée relative à l'usager:

form_var_nom_de_variable == "valeur conditionnelle"
form_user_var_nom_de_variable == "valeur conditionnelle"

La valeur conditionnelle doit respecter la casse et l'accentuation.

Exemple :

Le champ "Liste" libellé « Mode de transport » pourrait avoir comme nom de variable : mode_de_transport.

La page du (télé)formulaire prévue pour récolter les informations relatives aux modalités de stationnement habituelles d'un usager motorisé n'a pas lieu d'être soumise à un usager ayant sélectionner l'élément "Piéton" au sein d'une liste "Mode de locomotion" qui propose par ailleurs les éléments "Voiture" et "Camion".

La valeur "Piéton" permet donc de paramétrer une condition à l'affichage de la page "Modalités de stationnement habituelles": si la valeur du champ "Mode de locomotion" est différente de "Piéton", alors la page "Modalités de stationnement habituelles" doit s'afficher.

En langage Python, cela s'écrit comme ceci :

form_var_mode_de_transport != "Piéton" (où le != correspond à la syntaxe Python signifiant « différent de »).

Exemples de condition:

Dans la définition de pages conditionnelles et dans le paramétrage de sauts dans le workflow, il y a besoin d'exprimer une condition sous forme d'une expression Python. Cette page ne se veut évidemment pas un guide complet, toutes les possibilités offertes par le langage Python étant possibles, mais une série d'exemples concrets, rencontrés dans le paramétrage.

Une explication sur les variables accessibles se trouve dans la page variables de substitution.

Expressions simples

Pour tester le code postal associé à l'utilisateur courant, par exemple pour proposer une page différente aux habitants d'une commune particulière, l'expression suivante pourrait être utilisée :

session_user_var_codepostal == '07530'

Dans le même ordre d'idée, pour les utilisateurs qui ne seraient pas de cette commune :

session_user_var_codepostal != '07530'

De manière générale, la négative peut également être obtenue en entourant l'expression d'un not() :

not(session_user_var_codepostal == '07530')

Il peut également être imaginé de viser un département entier, en regardant les deux premiers chiffres, deux manières sont possibles :

session_user_var_codepostal.startswith('07')

Ou, en utilisant [:2] pour signifier « les deux premiers caractères » :

session_user_var_codepostal[:2] == '07'

Tout autre chose, pour une réservation, on pourrait vouloir afficher une page supplémentaire demandant les noms des inscrits, quand l'inscription est faite pour plusieurs personnes. L'utilisation de int() permet les comparaisons numériques :

int(form_var_nombre_de_reservations) > 1
Expressions combinées

Pour étendre un exemple donné plus haut, si on voulait afficher une page aux usagers de deux communes différentes, on combinerait les expressions avec le mot-clé or :

session_user_var_codepostal == '07520' or session_user_var_codepostal == '07530'

Cela peut devenir long avec un grand nombre de codes postaux, la même expression peut être réduite en expression simple avec in :

session_user_var_codepostal in ('07510', '07520', '07530')

Sur ces exemples de codes postaux, si l'application visait plusieurs pays, on devrait combiner le test, pour par exemple avoir « 07530 » comme code postal et « France » comme pays. Cela se fait avec le mot-clé and :

session_user_var_codepostal == '07520' and session_user_var_pays == 'France'