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.
Documentazione per sviluppatori: Variabili
Le Variabili sono frammenti riutilizzabili basati su template resi all'interno di contesti gestiti da FaceFlow.
Per gli utenti tecnici, le Variabili sono uno dei primitivi di riuso più leggeri in FaceFlow. Sono appropriate quando l'output deve essere condiviso tra layout, componenti, liste o altre superfici di rendering senza introdurre uno schema completo di Componente.
Responsabilità principali
Una Variabile è responsabile di:
- output riutilizzabile basato su template
- eventuale CSS e comportamento lato client
- semplice parametrizzazione tramite attributi
- rendering consapevole del contesto
- consegna sensibile alla cache per output ripetuti
Usa una Variabile quando l'unità di riuso è più piccola di un Componente ma più duratura del markup copiato.
Modello di una Variabile
Una Variabile tipica include:
- un'identità stabile
- un template Facet
- CSS opzionale
- JavaScript opzionale
- attributi opzionali
- metadati di categoria e descrizione
- una modalità di cache
Concettualmente:
{
"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'implementazione esatta dello storage è interna. Il contratto sopra è la parte importante per gli autori tecnici.
Sintassi di incorporamento
Le Variabili vengono incorporate con la sintassi a doppia parentesi quadra:
[[copyright-notice]]Con attributi:
[[copyright-notice company="Acme Inc"]]Le Variabili possono anche essere incorporate all'interno di altri template:
<footer class="site-footer">
[[copyright-notice company="Acme Inc"]]
</footer>I valori degli attributi devono essere passati come letterali racchiusi tra virgolette nella sintassi di incorporamento.
Se una Variabile ha bisogno di comportamento sensibile alla pagina o al runtime, leggi dal contesto di rendering all'interno del template della Variabile invece di cercare di iniettare un'espressione non quotata nella lista degli attributi.
Modello degli attributi
Gli attributi sono input nominati passati alla Variabile al momento del rendering.
Sono adatti per:
- varianti di testo
- etichette
- opzioni visive semplici
- piccoli valori specifici per il business
Esempio:
[[cta-badge label="New" tone="accent"]]Uso nel template:
<span class="badge badge-{{ attr.tone | default('neutral') }}">
{{ attr.label }}
</span>Gli attributi dovrebbero rimanere leggeri. Se l'unità di riuso necessita di uno schema editabile ampio, questo normalmente indica un Componente.
Esempio di miscelazione sicura di attributi letterali con il contesto di runtime:
<span class="badge badge-{{ attr.tone | default('neutral') }}">
{{ attr.label | default(page.title) }}
</span>Contesto di rendering
Le Variabili possono essere renderizzate rispetto a un contesto di runtime più ampio. Gli oggetti di contesto comuni includono:
pageuserpagessitelanguages/langnowattr
Esempio:
<p class="eyebrow">
{{ page.title }} updated {{ now.year }}
</p>Oppure un esempio guidato da query:
<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>Questo è ciò che rende le Variabili utili per piccoli frammenti dinamici senza richiedere una Lista o un Componente completo.
Posizionamento supportato
Le Variabili sono comunemente usate in:
- template di layout
- template di componente
- template di lista
- altre Variabili
- superfici di contenuto supportate che passano attraverso il rendering di FaceFlow
Esempi tipici:
[[site-announcement]]
[[page-breadcrumbs]]
[[recent-posts title="From the blog"]]Annidamento
Le Variabili possono fare riferimento ad altre Variabili:
<div class="footer-meta">
[[social-links]]
[[copyright-notice company="PageFace"]]
</div>L'annidamento è utile quando migliora la chiarezza. Evita catene profonde che rendono difficile il debug o la valutazione dell'impatto delle modifiche.
Modalità di cache
Le Variabili supportano più strategie di cache.
Auto
Usa questa modalità nella maggior parte dei casi. Il runtime determina se un comportamento statico o dinamico è appropriato in base alle esigenze di rendering.
Statico
Usa questa modalità quando l'output non dipende da un contesto utente, temporale o di richiesta variabile.
Dinamico
Usa questa modalità quando l'output dipende da un contesto che cambia frequentemente e non dovrebbe comportarsi come un frammento completamente cache-friendly.
Example decision rule:
current year footer -> auto
simple shared legal text -> static
logged-in user greeting -> dynamicLinee guida sulle prestazioni
Le Variabili sono spesso riutilizzate ampiamente, quindi la disciplina sulle prestazioni è importante.
- preferisci
autoostatica meno che non ci sia una reale ragione perdynamic - evita output costosi e con query pesanti in frammenti usati su molte pagine
- tratta le Variabili ampiamente condivise come asset sensibili alle prestazioni
- rivedi l'impatto delle modifiche prima di modificare una Variabile molto riutilizzata
Anteprima e test
Quando testi una Variabile, verifica:
- il rendering con attributi realistici
- il comportamento all'interno del contesto reale della pagina o del componente
- l'output sotto la modalità di cache prevista
- il comportamento delle Variabili annidate se è coinvolta la composizione
Esempio di pattern di test:
[[cta-badge label="Launch Ready" tone="success"]]
[[cta-badge label="New" tone="accent"]]Quando usare una Variabile
Usa una Variabile quando:
- il frammento è riutilizzato in diversi punti
- la struttura è piccola e stabile
- gli input sono limitati
- l'output necessita di consapevolezza del contesto
Non usare una Variabile quando:
- il contenuto è unico per una sola Pagina
- è richiesto uno schema editabile completo
- la struttura è sufficientemente ampia da costituire una sezione riutilizzabile
- l'output è in realtà un archivio dinamico piuttosto che un frammento
Pratiche da evitare
Evita:
- trasformare le Variabili in mini-pagine
- nascondere grandi workflow di business all'interno di una sola Variabile
- aggiungere troppi attributi per simulare uno schema di Componente
- catene di Variabili profondamente annidate con proprietà poco chiare
- usare la modalità di cache
dynamiccome impostazione predefinita senza una reale necessità
Esempi di pattern di costruzione
Small utility fragment:
[[copyright-notice company="PageFace"]]Page-aware reusable snippet:
<aside class="page-summary">
<h3>{{ page.title }}</h3>
<p>{{ page.summary }}</p>
</aside>Query-driven widget:
<div class="resource-count">
{{ pages.count selector="template=resource-item" }} resources
</div>