Afficher, masquer, désactiver

Ces propriétés viennent toutes du fragment partagé display : tout bloc qui l'inclut les possède. Elles répondent à des questions différentes, et on les confond souvent.

PropriétéQuestion à laquelle elle répond
effectCe qui arrive à ce bloc par défaut : rien, désactivé, masqué
conditionalDisplayUne formule 4D, évaluée côté serveur
effectForConditionalDisplayCe qui arrive quand cette formule est fausse
userRightNeededLe droit que le visiteur doit détenir
linkedLes autres champs à remplir avant que celui-ci soit utilisable
isBasedOnListboxSelectionSi le bloc dépend d'une sélection dans une listbox

conditionalDisplay s'exécute sur le serveur

C'est une formule 4D exécutée par EXECUTE FORMULA au moment du rendu, avec tout le contexte de la page : l'entité, la session, les variables process. Deux conséquences :

  • elle peut exprimer de vraies règles métier, pas seulement des comparaisons de champs ;
  • elle ne peut pas être réévaluée en dehors du rendu. C'est précisément pour cela que l'autorisation des fichiers enregistre une autorisation au moment du rendu au lieu de revérifier plus tard (voir Les fichiers).

effectForConditionalDisplay n'apparaît dans le panneau qu'une fois une formule saisie (visibleWhen: {conditionalDisplay: "*"}). Il permet de choisir entre : ne rien faire, désactiver, masquer, ou ne pas générer le bloc du tout.

En mode développement, le bloc reste visible, signalé par un badge : sinon, un éditeur ne pourrait pas atteindre un bloc masqué par sa propre règle.

Les effets diffèrent plus qu'il n'y paraît

  • disabled rend le bloc, grisé.
  • hidden le rend, puis le masque.
  • notLoaded ne le génère pas du tout : rien côté client ne peut donc le faire apparaître.

Choisissez en connaissance de cause : hidden envoie quand même le contenu au navigateur. Pour tout ce qui ne doit pas atteindre un visiteur non autorisé, la réponse est notLoaded ou un droit, pas une classe CSS.

Ne jamais écrire hidden dans customClass

Utilisez l'effet. Une classe hidden posée à la main entre en concurrence avec le mécanisme d'affichage du framework et gagne au mauvais moment — typiquement après un showBloc, qui semble alors ne rien faire.

linked est une liste séparée par des barres verticales

linked contient des noms de champs joints par |, émis sous forme d'attribut HTML et lus par checkLinkedFields. La valeur est rangée dans properties.linked : malgré son nom, ce n'est pas une relation.

Les droits

userRightNeeded nomme un droit, que le visiteur doit détenir. Pour les pages d'administration, le droit suit la convention ADMIN_<SLUG> plutôt qu'un code DEV écrit en dur.

Deux pièges ont été relevés lors de l'introduction des droits sur les écrans d'administration : une valeur publish nulle sur une URL d'administration produisait une erreur 404, et chaque événement d'un écran d'administration répondait 403 tant que le droit n'était pas accordé.

Recharger un bloc conditionnel

Un conteneur conditionnel a besoin de l'effet hidden pour avoir quelque chose sur quoi agir, et un rechargement vise le conteneur, pas le bloc qu'il contient. Recharger le bloc intérieur ne fait que refaire le rendu d'un contenu dont la visibilité est décidée par son parent.

Voir aussi