Génération de saisies conditionnelles avec afficher_si

Les saisies peuvent recevoir une option afficher_si qui permet de conditionner l’affichage d’une saisie en fonction de la valeur d’une ou plusieurs autres saisies.

Ceci peut être utile par exemple pour varier les questions en fonction de la réponse à des questions précédentes.

Cet article décrit dans quel cadre utiliser les options afficher_si. Pour la syntaxe de ces options, voir l’article « Affichage conditionnel de saisie : syntaxe des tests ».

Principe général

L’option afficher_si ajoutée à une saisie permet de préciser une condition sur les autres valeurs d’un formulaire indiquant si la saisie doit être affichée ou non.

Il est ainsi possible d’insérer — ou plutôt de simuler — plusieurs formulaires avec dans une même page.

Cette option est par exemple :

Exemple

Ci-dessous, un exemple de saisies conditionnelles encodé en YAML
Exemple YAML :

-
  saisie: 'oui_non'
  options:
    nom: 'choix'
    label: 'Utilisez-vous SPIP ?'
-
  saisie: 'input'
  options:
    nom: 'raison_non'
    label: 'Si non, pourquoi ?'
    afficher_si: '@choix@ == ""' 
-
  saisie: 'input'
  options:
    nom: 'raison_oui'
    label: 'Si oui, pourquoi ?'
    afficher_si: '@choix@ == "on"' 

Le nom des champs doit être encadré par le caractère @.
On se reportera à l’article « Affichage conditionnel de saisie : syntaxe des tests » pour avoir la syntaxe complète utilisable.
En effet, l’expression afficher_si est transcrite par le plugin saisies à la fois en JavaScript (pour un comportement interactif en direct lors de la saisie du formulaire) ET en PHP (pour calcul lors du Traitement du CVT).
Par conséquent, l’algorithme de transcriptions est loin d’être complet, et cela limite la diversité des expressions acceptables.

Application

L’option afficher_si peut être utilisée.

  • Pour l’affichage HTML des saisies, avec #GENERER_SAISIES. Dans ce cas, du JavaScript est automatiquement inséré pour modification dynamique du formulaire en fonction de la réponse apportée à certaines saisies par l’internaute. Attention :
    • Cela ne marche pas avec #SAISIE [1] ;
    • Le nom de la variable #ENV dans laquelle se situe les saisies doit commencer par un _ pour ne pas avoir d’échappement des guillemets. Donc #GENERER_SAISIES{#ENV{_saisies}} et non pas #GENERER_SAISIES{#ENV{saisies}}.
  • pour l’affichage HTML des réponses à un formulaire / des vues de saisies avec #VOIR_SAISIES
  • lors de la vérification en PHP des saisies avec saisies_verifier().

Vérifier et traiter avec afficher_si

Si l’on utilise la fonction saisies_verifier() pour vérifier les saisies, alors les saisies masquées par afficher_si ne seront pas vérifiées. Quelle que soit leur valeur, cette dernière sera transformée en NULL et cette valeur nulle sera transmise à la fonction traiter.

Si pour une raison ou une autre on a besoin de récupérer malgré tout la valeur des saisies masquées, on peut appeler, dans la fonction traiter, saisies_verifier en lui passant FALSE en deuxième paramètre. Dès lors, les saisies masquées seront vérifiées selon les options de vérification transmises, qu’elles soient masquées ou non, et leur valeur sera transmise à la fonction _traiter(). Ce sera donc cette dernière qui sera chargée, le cas échéant, de tenir compte ou non du caractère masqué de ces saisies.

Option afficher_si_remplissage_uniquement

Par défaut, la condition indiquée pour afficher_si s’applique aussi pour l’affichage des résultats finaux.

L’option afficher_si_remplissage_uniquement permet d’indiquer que la condition de afficher_si ne s’applique que lors de la saisie et non pour l’affichage. Dans ce cas, les données du champ figurent toujours dans les résultats transmis, même si la condition n’est pas satisfaite.

Effet javascript de masquage/affichage des champs

Pour masquer / afficher les champs, des effets jQuery sont utilisés.
Depuis la version 3.14.0, ces effets sont définis par les constantes :

  • _SAISIES_AFFICHER_SI_JS_SHOW pour l’affichage, défini par défaut à "show(400)"
  • _SAISIES_AFFICHER_SI_JS_HIDE pour le masquage, défini par défaut à "hide(400)"

Il est possible de modifier ces constantes dans un fichier _options.php.

Constante _SAISIES_AFFICHER_SI_JS_LISIBLE

Mettre dans un fichier [mes_options.php->https://www.spip.net/fr_article4654.html le code suivant

define('_SAISIES_AFFICHER_SI_JS_LISIBLE', true);

permet que le code javascript pour l’affichage des saisies soit lisibles par un·e humain·e, avec des retours lignes.

Notes

[1En effet, comment générer un code JavaScript de tests de valeur de champ si on n’a qu’un seul champ ?

Dernière modification de cette page le 6 mai 2019

Discussion

Aucune discussion

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom