Affichage conditionnel de saisie : syntaxe des tests

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

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

Cet article décrit la syntaxe utilisable dans les conditions. Pour la manière de gérer ces saisies conditionnelles, voir l’article : « Génération de saisies conditionnelles avec afficher_si ».

Il correspond à l’état des tests possibles avec la version 3.15.0 du plugins Saisies.

Rappel : moment des tests

Le test des valeurs se fait selon deux modes différents :

  • côté navigateur, en JavaScript ;
  • côté serveur, en PHP.

Cette double validation est nécessaire non seulement en termes d’accessibilité, mais aussi pour éviter d’avoir des messages d’erreur sur des champs obligatoires, mais dont l’affichage est conditionné par la valeur d’un autre champ, et donc qui ne sont pas tout le temps obligatoires.

C’est pourquoi les possibilités de tests sont limitées, mais suffisamment souples pour couvrir un large usage.

Dans la suite du présent article, tout ce qui est entre < et > doit être remplacé par une valeur réelle.

Syntaxe de base

Un test simple se décompose ainsi :

  • ! opérateur facultatif de négation, inverse la suite du test
  • @<nom du champ>@ obligatoire
  • opérateur parmi :
    • == test d’égalité avec <valeur> ;
    • != test d’inégalité avec <valeur> ;
    • « > » test de supériorité avec <valeur> :
    • « >= » test de supériorité ou d’égalité avec <valeur> ;
    • « <' test d’infériorité avec <valeur> ;
    •  »<=' test d’infériorité ou d’égalité avec <valeur> ;
    • IN vérifie, pour un champ à valeurs multiples, les valeurs cochées. Cf. la section détaillée.
    • !IN vérifie, pour un champ à valeurs multiples, type que les valeurs non cochées. Cf. la section détaillée.
  • "<valeur>" ou '<valeur>' ou <valeur_numerique_entiere> la valeur à tester.
    • Pour les champs de type clé/valeur (bouton radio, liste déroulante, etc.), il s’agit de la valeur de la clé et non pas de la valeur lisible par les humain·e·s.
    • La présence de guillemet est obligatoire, sauf si vous voulez tester une valeur numérique entière.

Exemple :

@champ_1@ == "oui"

vérifie que le champ_1 est égal à « oui ».

@champ_1@ != "oui"

vérifie que le champ_1 est différent de « oui ».

Tests sur les champs à valeurs multiples (tableaux)

Les cases à cocher multiples et les sélections multiples renvoient des tableaux, et non pas de simples chaînes. Comment tester qu’une valeur est cochée ? En utilisant l’opérateur IN. <valeur> doit contenir la liste des valeurs à tester, séparées par des virgules.

Exemple :

@checkbox_1@ IN "a,b"

Vérifie que la clé a ou la clé b est cochée pour le champ chechbox_1.

L’opérateur inverse !IN vérifie qu’aucune des valeurs de <valeur> n’est cochée.

Ainsi

@checkbox_1@ !IN "a,b"

Vérifie que NI la clé a NI la clé b ne sont cochées dans le champ @checkbox_1@.

Test simplifié

Pour les champs de type « case à cocher » unique, où il importe essentiellement de vérifier si la case est cochée, il est possible de faire un simple test : @<champ>@, sans <opérateur> ni "<valeur>". Un ! peut être mis avant @<champ>@.

Mieux vaut cependant être explicite et tester @<champ>@ == "on" ou @<champ>@ != "on".

Tests combinés

Il est possible de combiner les tests de plusieurs champs en utilisant les opérateurs booléens communs à PHP et à JavaScript, à savoir :
-  || pour OU ;
-  && pour ET ;
-  ! pour NON ;
-  ainsi que () pour regrouper des tests.

Ainsi :

@champ_1@ == "oui" || @champ_2@ == "oui"

Affiche la saisie si champ_1 est égal à oui ou bien si champ_2 est égal à oui, ou si les deux sont égaux à oui.

@champ_1@ == "oui" && @champ_2@ == "oui"

Affiche la saisie si champ_1 est égal à oui ET si champ_2 est égal à oui.

(@champ_1@ == "oui" || @champ_2@ == "oui") && ! (@champ_1@ == "oui" && @champ_2@ == "oui")

Affiche la saisie si champ_1 est égal à oui OU si champ_2 est égal à oui, mais pas si les deux sont égaux à oui en même temps.

Tester la présence de plugin

La syntaxe @plugin:<préfix>@ permet de tester que le plugin de préfixe <préfix> est activé. Réciproquement, !@plugin:<préfix>@ permet de vérifier que ce plugin n’est pas activé.

Ainsi :

@plugin:article_pdf@

N’affiche la saisie que si le plugin article_pdf est activé.

Tester la valeur d’une configuration

La syntaxe @config:<champ>:<sous_champ>@ ou @config:<champ>/<sous_champ>@ permet de tester la valeur de la configuration <champ>/<sous_champ> avec lire_config() (équivalent PHP de #CONFIG).

Par exemple, pour tester si le nom du site est égal à « Mon site SPIP » :

@config:nom_site@ == "Mon site SPIP"

La profondeur des sous-champs est illimitée [1].

Résumé

Sont gérés avec afficher_si :

  • les tests de valeur de champ @<champ>@ et "<valeur>" / '<valeur>'
  • les tests de présence de plugin @plugin:<plugin>@
  • les tests de valeur de configuration @config:<config>@
  • les égalités et inégalités : == et !=
  • la présence ou l’absence d’une valeur pour un champ à valeurs multiples : IN et !IN
  • la combinaison de tests : !, &&, ||, ().

Tout le reste n’est pas géré :

  • côté PHP, tout test qui contient autre chose sera purement et simplement ignoré
  • côté JS, cela risque de planter.

Notes

[1Depuis la version 3.11.0 du plugin saisies.

Dernière modification de cette page le 16 mars 2019

Discussion

3 discussions

  • 1

    Il me reste à trouver où se cache, le paramètre caché qui active la modération a priori/ a posteriori

    Le simple bouton radio proposé demeurant pour moi sans effet.

    Répondre à ce message

  • 1

    J’ai trouvé la réponse !!

    Le nom donné au champ apparait dans un cadre nommé « Aide mémoire » à gauche.
    Bien………

    Répondre à ce message

  • Bonjour, très interessant ce plugin, mais…

    je ne parviens pas à faire fonctionner l’apparition d’un champ conditionnel.
    La référence est un champ avec trois cases à cocher
    part/un particlier
    coupl/un couple
    asso/une association

    J’indique bien la clé comme indiqué.

    Ce que vous appelez @champ@ est, je suppose l’intitulé donné au champ.

    J’ai testé
    si le nom du champ supportait les majuscules et les espaces.
    si l’expression @nom du champ@ / @nom_du_champ@ / @champ@
    si @champ1@ == « toto » / @champ1@==« toto »

    Et ça ne marche pas.

    Merci de votre aide.

    Répondre à ce message

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