CHAPITRE 19 — La grammaire des slots en détail
📚 Chapitre 19 — La grammaire des slots en détail
Référence exhaustive de tous les types de slot et de leurs attributs. Gardez ce chapitre sousà laportée de main quandlors vousde annotezl'annotation d'un template.
📐 Format général
{{slot:<name>|type=<type>|default=<value>|label=<text>|group=<section>|help=<text>|maxlength=<int>|options=<csv>}}
Tous les attributsattributs, saufà l'exception de name et type, sont optionnels.facultatifs. L'ordre est libre. Le séparateur est le pipecaractère |.pipe.
📜 Règles syntaxiques
Règle | Détail |
|---|---|
Identifiant |
, |
Unicité | Unique par page. Deux slots avec le même nom |
Pas d'espaces |
. |
Échappement | Le pipe
à
. |
| Un token de slot tient sur une seule ligne. |
🎨 Les 10dix types de slot
1️⃣Type
text — Texte court
Champ d'une seule ligne, sans formatage.mise en forme.
<h1>{{slot:hero_title|type=text|default=Bienvenue|label=Titre principal|maxlength=80}}</h1>
UI StudioInterface :inputchamp de saisie simple.- Idéal pour : titres, libellés,
CTA,boutons d'appel à l'action, copyright. - Compteur de caractères affiché si
maxlengthest défini.
2️⃣Type
textarea — Texte long brut
Multi-lignes, sans formatagemise en forme HTML.
<p class="lead">{{slot:hero_lead|type=textarea|default=Une accroche.|label=Accroche|maxlength=300}}</p>
UI StudioInterface :textarea.zone de texte multi-lignes.- Les
retours\ndeviennentà la ligne sont automatiquement convertis en balises<br>automatiquementau rendu. - Idéal pour : accroches,
courtsparagraphes simples.
3️⃣Type
richtext — Texte riche WYSIWYG
Mise en forme complète via CKEditor.
<div class="post-body">
{{slot:post_body|type=richtext|default=<p>Contenu de l'article.</p>|label=Corps de l'article}}
</div>
UI StudioInterface : éditeur CKEditor (Format,Bold/Italic,gras,Listes,italique,Liens,listes,Couleurs,liens,Alignement,couleurs,…alignement, etc.).- Idéal pour : corps d'articles, descriptions longues, conditions générales.
- La valeur stockée contient du HTML (
<p>,<strong>, etc.).
4️⃣Type
image — Média image
<img src="{{slot:hero_image|type=image|default=/medias/hero.jpg|label=Image hero}}" alt="...">
UI StudioInterface :inputchamptexte +texte, boutonpickerdemédiasélection+dans la bibliothèque, boutonretirerde+suppressionvignette.et vignette d'aperçu.- Stocke soit une URL absolue, soit un shortcode
{{media:ref=X.url}}. - Non traduisible par défaut
(: la même image est servie dans toutes leslangues).langues.
5️⃣Type
url — Lien
<a href="{{slot:hero_cta_url|type=url|default=/contact|label=URL du bouton}}">...</a>
UI StudioInterface : champ texte avec validation URL légère.- Idéal pour : URL de bouton, liens vers les réseaux sociaux,
URLsURL de partage.
6️⃣Type
icon — Icône FontAwesome
{{slot:feature_1_icon|type=icon|default=fa-solid fa-rocket|label=Icône feature 1}}
UI StudioInterface :inputchampclasseclasse,+sélecteurcolordepickercouleur,+ 20vingt icônesrapidesproposées+enpreviewaccèslive.rapide, aperçu en direct.- Stockage en JSON :
{"class":"fa-solid fa-star","color":"#fbbf24"}. - Rendu :
<i class="fa-solid fa-star" style="color:#fbbf24"></i>. SanitiséSécurisé :whitelistliste blanche sur la classe (a-zA-Z0-9_-) etregexexpressionhexadécimal.régulière hexadécimale sur la couleur.
7️⃣Type
color — Couleur
<section style="background-color:{{slot:section_bg|type=color|default=#19052d|label=Couleur de fond}}">
UI StudioInterface :colorsélecteurpickerdeHTML5couleur+HTML5, champhex texte +hexadécimal, bouton«deDéfautretour».à la valeur par défaut.- Format strict :
#RRGGBBou#RRGGBBAA(avec transparence). - Non
traduisible.traduisible.
8️⃣Type
number — Nombre
<span class="stat">{{slot:stats_clients|type=number|default=42|label=Nombre de clients}}</span>
9️⃣Type
bool — Booléen
<?php if ('{{slot:hero_show_badge|type=bool|default=1|label=Afficher le badge}}'): ?>
<span class="badge">Nouveau</span>
<?php endif; ?>
UI StudioInterface :checkbox.case à cocher.- Valeur :
0ou1.1.
🔟Type
select — Liste déroulante
<section class="hero hero-{{slot:hero_layout|type=select|options=light,dark,gradient|default=light|label=Style du hero}}">
🎁 Valeurs par défaut spéciales
default=@lang:KEY
— Résolution via les fichiers .lang
de langue
default=@lang:KEY
QuandLorsque votre site utilise déjà des fichiers .lang Dolibarr (cas typique pour les sites multilingues existants), vous pouvez réutiliser les clés au lieu de les dupliquer en dur dans les slots :
<h1>{{slot:hero_title|type=text|default=@lang:HeroTitle|label=Titre du hero}}</h1>
Au moment du rendu, le module résout via $langs->trans('HeroTitle') selon la localelangue du visiteur. Les fichiers .lang du site présents dans DOL_DATA_ROOT/<entity>/website/<ref>/langs/ sont chargés automatiquement.
✅ Cas d'usage — — Migration progressive d'un site existant : vous gardezconservez vos fichiers .lang telsen quels,l'état, vous ajoutez les slots, et le client peut soit éditer dans le Studio (override)surcharge), soit garderconserver la traduction du .lang (canonique).
📊 RésuméRécapitulatif des types et de leur traduisibilité
Type |
| Traduisible |
|---|---|---|
|
|
|
|
|
|
| CKEditor |
|
|
|
|
|
|
|
| Classe |
|
|
|
|
|
|
|
|
|
|
|
|
|
⚠️ Pièges fréquents
⚠️ Slots dans des attributs JSON inlineintégrés — — Si vous avez du JSON inlineintégré dans une balise (par exemple data-config="{...}"), n'y mettezplacez pas de slot. Les doubledoubles accolades sont aussi un délimiteur Mustache et risquent de casser les {{libsbibliothèques JSJavaScript qui parseraient lece JSON.
⚠️ Identifiant trop long — — La limite est de 64 caractères. Au-delà, le scanner rejette silencieusementsilencieusement, (visiblece avecque met en évidence l'option --lint).
⚠️ Espaces autour des = — — Le scanner refuserejette type = text. ToujoursUtilisez toujours type=text.
⚠️ Caractère pipe dans une valeur — — default=A|B casse le parser.l'analyseur. Utilisez une autre séparationséparation, ou unlaissez default vide +et saisissez la valeur via le Studio.
📋 Récapitulatif
✅ Vous savez maintenantdésormais :
- La syntaxe complète d'un token de slot.
- Les
10dix types disponibles et leursUIsinterfaces respectives. - La résolution
@lang:KEYpour réutiliser les fichiers .lang Dolibarr. - Quels types sont traduisibles ou non.
- Les pièges syntaxiques fréquents.
AuLe prochainchapitre chapitre, onsuivant aborde les shortcodesshortcodes, qui injectent des données Dolibarr dans le HTML.