Routing Dinamico - lucadileo9/template-catalog GitHub Wiki
Il sistema di routing dinamico è uno dei pilastri del progetto. Ecco come funziona:
Descrizione Generale
Il file TemplatePage
è un componente Next.js che gestisce il caricamento dinamico di template specifici basati sul percorso (slug
) fornito dall'URL. Questo approccio permette di organizzare e gestire diverse pagine e layout in modo modulare, caricando solo i componenti necessari per un determinato template.
Il codice verifica l'esistenza del template richiesto, carica dinamicamente il layout e la pagina corrispondente, e gestisce eventuali errori mostrando una pagina 404 nel caso in cui il template non sia disponibile.
[...slug]
Funzionamento della Cartella La cartella [...slug]
utilizza una route dinamica di Next.js, nota come "catch-all route". Questo tipo di route consente di catturare tutti i segmenti dell'URL dopo un certo punto e renderli disponibili come array (slug
) all'interno dei parametri della pagina.
Ad esempio:
- URL:
/pizzeria/menu/1/edit
slug
:["pizzeria", "menu", "1", "edit"]
Tutti i segmenti dell'URL vengono passati come array al parametro slug
, permettendo di gestire percorsi complessi in modo flessibile.
Logica Principale
-
Estrazione del Nome del Template:
- Il primo elemento di
slug
è considerato il nome del template (templateName
). - I segmenti successivi (
subPath
) rappresentano il percorso interno al template.
- Il primo elemento di
-
Verifica dell'Esistenza del Template:
- Il codice controlla se il
templateName
è presente nell'arrayvalidTemplates
. Se non lo è, viene mostrata una pagina 404.
- Il codice controlla se il
-
Caricamento Dinamico:
- Layout: Viene caricato dinamicamente il layout del template dal percorso
../../templates/${templateName}-template/app/layout
. - Pagina: Viene caricato dinamicamente il componente della pagina corrispondente al
subPath
. SesubPath
è vuoto, viene caricata la pagina principale del template.
- Layout: Viene caricato dinamicamente il layout del template dal percorso
-
Gestione degli Errori:
- Se si verifica un errore durante il caricamento del template o del layout, viene mostrata una pagina 404.
Output
Il componente restituisce il layout del template (TemplateLayout
) che avvolge il componente della pagina (TemplateApp
). Durante il caricamento, vengono mostrati messaggi di caricamento (<p>Caricamento...</p>
).
Esempi di Utilizzo
/pizzeria
URL: templateName
:"pizzeria"
subPath
:[]
- Carica:
- Layout:
../../templates/pizzeria-template/app/layout
- Pagina:
../../templates/pizzeria-template/app/page
- Layout:
/pizzeria/menu/1/edit
URL: templateName
:"pizzeria"
subPath
:["menu", "1", "edit"]
- Carica:
- Layout:
../../templates/pizzeria-template/app/layout
- Pagina:
../../templates/pizzeria-template/app/menu/1/edit/page
- Layout:
Nota: Il funzionamento descritto sopra NON supporta route dinamiche aggiuntive all'interno dei template. Ad esempio, se il subPath
contiene segmenti dinamici (come [id]
), queste non verranno gestite automaticamente e potrebbero causare errori.