FaceFlow Variables — Reusable Template Fragments
Variables are the dynamic building blocks of FaceFlow. They allow you to create reusable template snippets — HTML, CSS, and JavaScript — that can be embedded anywhere in your pages, layouts, and components. Variables use the powerful Facet template engine to render dynamic content with a Handlebars-like syntax.
Documentation developpeur Variable
Les Variables sont des fragments reutilisables pilotes par template, rendus dans des contextes geres par FaceFlow.
Pour les utilisateurs techniques, les Variables sont l'une des primitives de reutilisation les plus legeres dans FaceFlow. Elles conviennent lorsque la sortie doit etre partagee entre des layouts, des components, des lists ou d'autres surfaces de rendu sans introduire un schema complet de Component.
Responsabilite centrale
Une Variable est responsable de :
- la sortie de template reutilisable
- un CSS optionnel et un comportement cote client optionnel
- une parametrisation simple via des attributs
- un rendu conscient du contexte
- une livraison sensible au cache pour les sorties repetees
Utilisez une Variable quand l'unite de reutilisation est plus petite qu'un Component mais plus durable qu'un simple copier-coller de markup.
Modele de Variable
Une Variable typique comprend :
- une identite stable
- un template Facet
- un CSS optionnel
- un JavaScript optionnel
- des attributs optionnels
- des metadonnees de categorie et de description
- un mode de cache
Conceptuellement :
{
"name": "copyright-notice",
"title": "Copyright Notice",
"category": "footer",
"cacheMode": "auto",
"attributes": [
{ "name": "company", "default": "PageFace" }
],
"html": "<p>© {{ now.year }} {{ attr.company }}</p>",
"css": ".copyright { color: #64748b; }",
"js": ""
}L'implementation exacte de stockage reste interne. Le contrat ci-dessus est la partie importante pour les auteurs techniques.
Syntaxe d'inclusion
Les Variables sont incluses avec la syntaxe a doubles crochets :
[[copyright-notice]]Avec attributs :
[[copyright-notice company="Acme Inc"]]Les Variables peuvent aussi etre incluses dans d'autres templates :
<footer class="site-footer">
[[copyright-notice company="Acme Inc"]]
</footer>Les valeurs d'attribut doivent etre passees comme litteraux entre guillemets dans la syntaxe d'inclusion.
Si une Variable a besoin d'un comportement dependant de la page ou du runtime, lisez le contexte de rendu dans le template de la Variable plutot que d'essayer d'injecter une expression non quotee dans la liste d'attributs.
Modele d'attributs
Les attributs sont des entrees nommees passees a la Variable au moment du rendu.
Ils conviennent pour :
- des variantes de copy
- des labels
- de petites options visuelles
- de petites valeurs specifiques au metier
Exemple :
[[cta-badge label="New" tone="accent"]]Usage dans le template :
<span class="badge badge-{{ attr.tone | default('neutral') }}">
{{ attr.label }}
</span>Les attributs doivent rester legers. Si l'unite reutilisable a besoin d'un schema editable large, cela indique en general qu'il faut plutot un Component.
Exemple de combinaison sure entre attributs litteraux et contexte runtime :
<span class="badge badge-{{ attr.tone | default('neutral') }}">
{{ attr.label | default(page.title) }}
</span>Contexte de rendu
Les Variables peuvent etre rendues avec un contexte runtime plus large. Les objets de contexte frequents incluent :
pageuserpagessitelanguages/langnowattr
Exemple :
<p class="eyebrow">
{{ page.title }} updated {{ now.year }}
</p>Ou un exemple pilote par requete :
<ul class="recent-posts">
{{#pages selector="template=blog-post, sort=-published, limit=3" as="item"}}
<li><a href="{{ item.url }}">{{ item.title }}</a></li>
{{/pages}}
</ul>C'est ce qui rend les Variables utiles pour de petits fragments dynamiques sans necessiter une List ou un Component complet.
Surfaces compatibles
Les Variables sont couramment utilisees dans :
- les templates de Layout
- les templates de Component
- les templates de List
- d'autres Variables
- les surfaces compatibles qui passent par le rendu FaceFlow
Exemples typiques :
[[site-announcement]]
[[page-breadcrumbs]]
[[recent-posts title="From the blog"]]Imbrication
Les Variables peuvent referencer d'autres Variables :
<div class="footer-meta">
[[social-links]]
[[copyright-notice company="PageFace"]]
</div>L'imbrication est utile lorsqu'elle ameliore la clarte. Evitez les chaines trop profondes qui rendent le debug ou l'impact des changements difficiles a comprendre.
Modes de cache
Les Variables prennent en charge plusieurs strategies de cache.
Auto
A utiliser dans la plupart des cas. Le runtime determine si un comportement statique ou dynamique convient selon les besoins de rendu.
Static
A utiliser lorsque la sortie ne depend pas d'un utilisateur changeant, du temps ou d'un contexte sensible a la requete.
Dynamic
A utiliser lorsque la sortie depend d'un contexte qui change souvent et ne doit pas se comporter comme un fragment entierement compatible cache.
Regle de decision :
pied de page avec annee courante -> auto
texte juridique partage simple -> static
salutation utilisateur connecte -> dynamicConseils de performance
Les Variables sont souvent reutilisees largement, donc la discipline de performance compte.
- preferez
autooustaticsauf raison reelle d'utiliserdynamic - evitez les sorties couteuses ou riches en requetes dans des fragments utilises sur de nombreuses pages
- traitez les Variables largement partagees comme des actifs sensibles a la performance
- revoyez l'impact des changements avant d'editer une Variable tres reutilisee
Apercu et test
Quand vous testez une Variable, verifiez :
- le rendu avec des attributs realistes
- le comportement dans le contexte reel de page ou de component
- la sortie selon le mode de cache vise
- le comportement des Variables imbriquees si une composition est impliquee
Exemple de pattern de test :
[[cta-badge label="Launch Ready" tone="success"]]
[[cta-badge label="New" tone="accent"]]Quand utiliser une Variable
Utilisez une Variable quand :
- le fragment est reutilise a plusieurs endroits
- la structure est petite et stable
- les entrees sont limitees
- la sortie doit etre consciente du contexte
N'utilisez pas une Variable quand :
- le contenu est unique a une seule Page
- un schema editable complet est requis
- la structure est assez grande pour devenir une section reutilisable
- la sortie est en realite une archive dynamique plutot qu'un fragment
Anti-patterns
Evitez :
- de transformer les Variables en mini-pages
- de cacher de gros workflows metier dans une seule Variable
- d'ajouter trop d'attributs pour simuler le schema d'un Component
- des chaines de Variables imbriquees trop profondes avec une propriete peu claire
- d'utiliser
dynamicpar defaut sans besoin reel
Exemples de construction
Petit fragment utilitaire :
[[copyright-notice company="PageFace"]]Extrait reutilisable conscient de la page :
<aside class="page-summary">
<h3>{{ page.title }}</h3>
<p>{{ page.summary }}</p>
</aside>Widget pilote par requete :
<div class="resource-count">
{{ pages.count selector="template=resource-item" }} resources
</div>