Template
Come viene definito il layout generale di una pagina e come creare nuovi template.
Introduzione
Il Template definisce il layout generale di una Pagina — è il valore del campo template della pagina e corrisponde a una cartella in website/src/pages/Template/.
Il meccanismo dei Tipi di Componente (cartelle dinamiche + info.json) è stato ispirato a questo meccanismo dei Template, che già funzionava in questo modo per primo. La struttura è praticamente la stessa, solo applicata a pagine intere invece che a blocchi di contenuto.
Come funziona
website/src/pages/Template/
├── index.jsx # router: sceglie il template da renderizzare
└── Default/
├── index.jsx # il template stesso
├── index.less
└── info.json # nome/descrizione del template, per lingua
Ogni cartella dentro Template/ è un template selezionabile nel campo Template del modulo di modifica della pagina. Il nome della cartella (Default) è il valore salvato nel campo template della pagina.
Il info.json del template Predefinito, ad esempio:
{
"en": { "label": "Default", "description": "For pages that use generic styling." },
"it": { "label": "Predefinito", "description": "Per pagine che utilizzano lo stile generico." }
}
info.jsonCome nei Tipi di Componente, il select di Template nel modulo della pagina mostra l'etichetta (label) tradotta del info.json — a tal fine, la richiesta al servizio invia la lingua corrente (Cluar.currentLanguage().locale). Ciò che viene salvato nel campo template della pagina rimane il nome della cartella (Default).
Esiste anche un servizio lato server (server/services/page/template/list/) che scansiona le cartelle in tempo reale e restituisce l'elenco dei template disponibili — per lo stesso motivo: non è necessario riavviare il server per aggiungere un nuovo template, basta creare la cartella.
Una differenza rispetto ai Tipi di Componente: i Template non hanno config.json — oggi non ci sono capacità configurabili per template, solo index.jsx e info.json.
Il template Predefinito
Il template Predefinito (Default) è quello usato dalla maggior parte delle pagine: avvolge il contenuto della pagina con l'intestazione e il piè di pagina del sito (BaseHeader / BaseFooter) attorno al Builder — il componente che effettivamente percorre e renderizza i componenti della pagina (Banner, Contenuto, Elenco, Slider, Funzionalità), nell'ordine definito dal campo Ordine di ciascuno.
Se il campo template di una pagina non corrisponde a nessuna cartella esistente (es.: nome scritto in modo errato, o cartella eliminata), CLUAR non fallisce né usa il Predefinito come sostituto — invece, renderizza solo il Builder "nudo", senza l'intestazione né il piè di pagina del sito. È un comportamento diverso da quello che accade nei Tipi di Componente, dove un tipo non riconosciuto ricade sul tipo Predefinito.
È il router (Template/index.jsx) che decide questo:
import Default from "./Default";
import Builder from "../../common/Builder";
const Template = ({ page }) => {
if (page.template === "Default") {
return <Default page={page} />;
} else {
return <Builder page={page} />;
}
};
export default Template;
Nota che esiste solo un controllo esplicito ("Default") — qualsiasi altro valore di template, riconosciuto o no, cade direttamente nell'else e renderizza solo il Builder.
Come creare un nuovo template
- Crea una nuova cartella dentro
website/src/pages/Template/(es.:Template/Landing/). - All'interno, crea
index.jsx(il layout React del template),index.less(stili) einfo.json(label/descrizione per lingua — è questa etichetta che appare nel select). - Nel
index.jsxdel router (Template/index.jsx), importa il nuovo template e aggiungilo alla condizione che sceglie il template tramite il campopage.template. - Il nuovo template inizia ad apparire automaticamente nel select di Template del modulo di modifica della pagina, con il nome della cartella come valore salvato.
Passo successivo
Esplora i Permessi.