Layout
I Layout sono componenti Astro utilizzati per fornire una struttura dell’interfaccia utente riutilizzabile, ad esempio un modello di pagina.
Usiamo convenzionalmente il termine “layout” per i componenti Astro che forniscono elementi comuni dell’interfaccia utente condivisi tra le pagine come intestazioni, barre di navigazione e piè di pagina. Un tipico componente di layout Astro fornisce pagine Astro, Markdown o MDX con:
-
una shell di pagina (tag
<html>
,<head>
e<body>
) -
uno
<slot />
per specificare dove deve essere inserito il contenuto della singola pagina.Ma non c’è niente di speciale in un componente di layout! Possono accettare proprietà e importare e utilizzare altri componenti come qualsiasi altro altro componente Astro. Possono includere componenti del framework dell’interfaccia utente e script lato client (EN). Non devono nemmeno fornire una shell di pagina intera e possono invece essere utilizzati come modelli di interfaccia utente parziali.
I componenti del layout vengono comunemente posizionati in una directory src/layouts
nel progetto per l’organizzazione, ma questo non è un requisito; puoi scegliere di posizionarli ovunque nel tuo progetto. Puoi anche collocare i componenti del layout accanto alle tue pagine prefissando i nomi dei layout con _
.
Layout di esempio
📚 Scopri di più sugli slot.
Layout Markdown/MDX
I layout di pagina sono particolarmente utili per le pagine Markdown e MDX (EN) che altrimenti non avrebbero alcuna formattazione della pagina.
Astro fornisce una speciale proprietà frontmatter layout
per specificare quale componente .astro
utilizzare come layout di pagina.
Un layout tipico per le pagine Markdown o MDX include:
- La proprietà
frontmatter
per accedere al frontmatter e ad altri dati della pagina Markdown o MDX. - Uno
<slot />
predefinito per indicare dove deve essere visualizzato il contenuto Markdown/MDX della pagina.
Puoi impostare il tipo Props
(EN) di un layout con l’helper MarkdownLayoutProps
o MDXLayoutProps
:
Proprietà per il layout Markdown
Un layout Markdown/MDX avrà accesso alle seguenti informazioni tramite Astro.props
:
file
- Il percorso assoluto di questo file (ad esempio/home/user/projects/.../file.md
).url
- Se si tratta di una pagina, l’URL della pagina (ad esempio/it/guides/markdown-content
).frontmatter
- tutto il frontmatter dal documento Markdown o MDX.frontmatter.file
- Uguale alla proprietàfile
di livello superiore.frontmatter.url
- Uguale alla proprietàurl
di livello superiore.
headings
- Un elenco di intestazioni (h1 -> h6
) nel documento Markdown o MDX con metadati associati. Questo elenco segue il tipo:{ profondità: numero; lumaca: stringa; testo: stringa }[]
.- (Solo Markdown)
rawContent()
- Una funzione che restituisce il documento Markdown non elaborato come una stringa. - (Solo Markdown)
compiledContent()
- Una funzione che restituisce il documento Markdown compilato in una stringa HTML.
Un esempio di post del blog Markdown può passare il seguente oggetto “Astro.props” al suo layout:
Un layout Markdown/MDX avrà accesso a tutte le proprietà esportate (EN) di tutti i suoi file da Astro.props
con alcune differenze fondamentali:
-
Le informazioni sull’intestazione (ad esempio gli elementi
h1 -> h6
) sono disponibili tramite l’arrayheadings
, anziché tramite la funzionegetHeadings()
. -
file
eurl
sono anche disponibili come proprietàfrontmatter
nidificate (ad esempiofrontmatter.url
efrontmatter.file
). -
I valori definiti al di fuori di frontmatter (ad esempio le istruzioni
export
in MDX) non sono disponibili. Valuta invece la possibilità di importare un layout.
Importazione manuale dei layout (MDX)
Potrebbe essere necessario passare informazioni al layout MDX che non esistono (o non possono) esistere nel frontmatter. In questo caso, puoi invece importare e utilizzare un componente<Layout />
e passargli oggetti di scena come qualsiasi altro componente:
Quindi, i tuoi valori saranno disponibili tramite Astro.props
nel tuo layout e il tuo contenuto MDX verrà inserito nella pagina in cui è scritto il tuo componente <slot />
:
📚 Scopri di più sul supporto Markdown e MDX di Astro nella nostra guida Markdown/MDX (EN).
Utilizzo di un layout per .md
, .mdx
e .astro
È possibile scrivere un singolo layout Astro per ricevere l’oggetto frontmatter
dai file .md
e .mdx
, così come qualsiasi oggetto di scena con nome passato dai file .astro
.
Nell’esempio seguente, il layout mostrerà il titolo della pagina da una proprietà YAML title
di frontmatter o da un componente Astro che passa un attributo title
:
Inserire layour uno nell’altro
Non è necessario che i componenti del layout contengano un’intera pagina HTML. Puoi suddividere i layout in componenti più piccoli e combinare componenti di layout per creare modelli di pagina ancora più flessibili. Questo modello è utile quando desideri condividere del codice su più layout.
Ad esempio, un componente di layout BlogPostLayout.astro
potrebbe definire il titolo, la data e l’autore di un post. Quindi, un BaseLayout.astro
a livello di sito potrebbe gestire il resto del modello di pagina, come navigazione, piè di pagina, meta tag SEO, stili globali e caratteri. Puoi anche trasferire gli oggetti di scena ricevuti dal tuo post a un altro layout, proprio come qualsiasi altro componente inserito in un altro.