Les modèles et les slots
Un modèle est une mise en page réutilisable. Ses blocs sont rangés dans BSPK_WEB_TEMPLATE, pas dans BSPK_WEB_CONTENT. Poser un modèle sur une page ne coûte qu'un seul bloc, de type model : la page ne copie pas les blocs du modèle, elle pointe vers eux.
C'est tout l'intérêt et toute la contrainte : modifiez le modèle, et chaque emplacement où il est posé change avec lui. Ce qu'un emplacement peut surcharger, c'est exactement ce que le modèle expose.
Deux sortes de slots
| Sorte | Ce qu'il ouvre | Déclaré par |
|---|---|---|
| Zone | Une région du modèle que l'emplacement remplit avec ses propres blocs | vt_SlotName sur le bloc du modèle |
| Valeur | Une propriété d'un bloc, modifiable pour chaque emplacement | vo_SlotExpose sur ce bloc |
Une zone porte un nom, et elle est désignée par ce nom, jamais par un uuid : retravailler le modèle ne doit pas faire perdre ce que les emplacements y ont mis.
Slots de valeur : la règle de nommage
"vo_SlotExpose": { "vt_FieldLabel": true }
C'est un drapeau, rien de plus. Un slot est désigné par le bloc et la propriété, jamais par un nom inventé. L'emplacement range sa propre valeur sous :
vo_SlotValues["<block uuid>|<property>"]
La même idée existe en trois variantes :
| Exposition | L'emplacement range sous |
|---|---|
vo_SlotExpose — une propriété | <uuid>|<property> |
vo_SlotCssExpose — un chemin de style (target|breakpoint|variant|property) | <uuid>|css|<ce chemin> |
vo_SlotEventExpose — un type d'événement | vo_SlotEvents |
vo_SlotLabels contient le libellé affiché pour un slot, indexé par le nom du slot. S'il est vide, c'est le nom lui-même qui s'affiche.
Les événements s'ajoutent, ils ne remplacent pas
Exposer un type d'événement ne donne pas à l'emplacement le droit de modifier l'événement du modèle : celui-ci reste en lecture seule, toujours. Cela donne le droit d'en ajouter un du même type, qui s'exécute en plus.
L'interrupteur reste nécessaire, même s'il ne protège de rien contre l'écrasement : il définit une surface. Sans lui, n'importe quel emplacement pourrait accrocher n'importe quel comportement à n'importe quel bloc, et le modèle ne garantirait plus rien.
Ce qui ne peut pas être exposé
Le contenu d'un bloc text n'est pas exposable. C'est un widget autonome, avec son propre éditeur, et il n'a aucune propriété à transmettre.
Éditer un modèle : un troisième contexte
Ni une page, ni un gabarit d'administration : ce sont les blocs du modèle ouvert.
GG_IS_MODEL_EDITORindique que l'éditeur est ouvert ;GG_EDIT_CONTEXTnomme la table dans laquelle on écrit ;GG_IN_MODEL_RENDERindique qu'un modèle est en train d'être rendu à l'intérieur d'une page.
L'éditeur de modèle est le contexte le plus exigeant : pas d'entrée de menu, pas de webDomainMenuUuid. Ce qui fonctionne là fonctionne partout, ce qui en fait le bon endroit pour tester un mécanisme.
Ses descendants se récupèrent de la même façon que partout ailleurs :
query("uuidKey = :1 or parentCollection % :2"; root; root)
Invariant utile : tant que vous travaillez dans un modèle,
BSPK_WEB_CONTENTne doit pas changer d'un seul octet. S'il change, quelque chose a écrit dans la mauvaise table.
Voir aussi
- Modèle et Zone de modèle — les propriétés des blocs
- Le modèle de données — pourquoi
parentCollectionse requête avec%

