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 |
|---|---|
effect | Ce qui arrive à ce bloc par défaut : rien, désactivé, masqué |
conditionalDisplay | Une formule 4D, évaluée côté serveur |
effectForConditionalDisplay | Ce qui arrive quand cette formule est fausse |
userRightNeeded | Le droit que le visiteur doit détenir |
linked | Les autres champs à remplir avant que celui-ci soit utilisable |
isBasedOnListboxSelection | Si 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).
Exception : pour les effets notLoaded et readOnly, la même formule est évaluée de nouveau quand un formulaire revient au serveur, avec le contexte de cette requête (voir plus bas).
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, ne pas générer le bloc du tout ou, pour un champ de saisie, l'afficher en lecture seule.
En mode développement, un bloc masqué ou non chargé 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
disabledrend le bloc, grisé.hiddenle rend, puis le masque.notLoadedne le génère pas du tout : rien côté client ne peut donc le faire apparaître.readOnly(champs de saisie seulement) affiche le libellé et la valeur, sans zone de saisie.
Choisissez en connaissance de cause :
hiddenenvoie quand même le contenu au navigateur. Pour tout ce qui ne doit pas atteindre un visiteur non autorisé, la réponse estnotLoadedou un droit, pas une classe CSS.
La lecture seule d'un champ de saisie
L'effet « Lecture seule » (readOnly) affiche un champ sous forme de libellé et de valeur quand la formule est fausse. Il évite d'ajouter un bloc texte à côté d'un champ pour montrer une valeur qui ne doit pas être modifiée : c'est le même bloc, avec le même vt_FieldName et la même façon d'obtenir sa valeur (entité de la page, vt_HowGetPk, élément sélectionné, vt_Value…). Seul le rendu change.
Il n'est proposé que sur fieldText, fieldSelect, fieldCheckbox et fieldToggle. Les autres blocs, y compris le dépôt de fichier, la capture et les conteneurs, ne le proposent pas, et le panneau refuse de l'enregistrer sur eux.
| Champ | Valeur affichée |
|---|---|
fieldText | le texte ; une date au format court du système ; un mot de passe masqué (••••••••) ; un texte multiligne avec ses sauts de ligne ; un texte enrichi décodé et nettoyé ; en multilingue, la langue courante. Un champ caché reste inchangé. |
fieldSelect | le libellé de l'option choisie (groupes d'options compris) ; en sélection multiple, les libellés séparés par une virgule |
fieldCheckbox | les libellés des options cochées, séparés par une virgule |
fieldToggle | Oui / Non |
Une valeur vide s'affiche par un tiret estompé. Le libellé est celui du champ, sans l'astérisque d'obligation ni les icônes d'aide, qui ne concernent que la saisie.
Une présentation par position de libellé
La valeur occupe la boîte d'un champ de saisie, sans sa bordure ni son fond : même hauteur, même retrait du texte, même taille de police et même place du libellé que le champ éditable. Dans une grille qui mêle champs éditables et champs en lecture seule, les lignes et les textes restent donc alignés. La hauteur est un minimum : une valeur longue ou multiligne agrandit la boîte au lieu de déborder.
Position du libellé (vl_LabelPosition) | Présentation en lecture seule |
|---|---|
| Flottant (0) | le libellé flotte sur le bord haut de la boîte, comme sur un champ rempli |
| Dessus (1) | le libellé du champ au-dessus de la boîte |
| Gauche (2) | le libellé dans la boîte, avant la valeur |
| Droite (3) | le libellé dans la boîte, après la valeur |
fieldCheckbox n'a pas de position de libellé : son libellé de groupe est au-dessus des options, il reste donc au-dessus. fieldToggle place son libellé à gauche, ou à droite avec le réglage « A droite » (vb_RevertLabel). Un texte enrichi a toujours son libellé au-dessus, comme en saisie.
Pour une mise en forme particulière, le rendu expose les classes bspk-readonly, bspk-readonly-label, bspk-readonly-value et bspk-readonly-text, l'attribut data-readonly, et le bloc porte effectForConditionalDisplay="readOnly".
Ce que garantit le serveur
Contrairement à hidden et disabled, aucun script ne peut rendre le champ de nouveau modifiable. Quand un formulaire est envoyé :
- un champ en lecture seule n'est pas validé : un champ obligatoire en lecture seule ne bloque pas l'envoi du formulaire ;
- une valeur envoyée sous son nom est retirée de la requête et n'est jamais enregistrée ;
- un événement qui partirait de ce champ est refusé.
La formule est évaluée de nouveau avec le contexte de la requête ; si elle produit une erreur, elle compte comme fausse, et le champ reste en lecture seule.
Astuce : une même fonction de dataclass, utilisée comme formule sur tous les champs d'une fiche (par exemple « la fiche est-elle modifiable ? »), permet de basculer toute la fiche en consultation en changeant une seule ligne de code.
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
- Les fonctions de rendu —
showBloc,hideBloc,hideBlockAccordingFieldValue - La sécurité — les droits sont revérifiés au POST, quoi qu'ait dit l'affichage

