Tutorial - Esteso con le Collezioni di Contenuti
Le collezioni di contenuto sono un modo potente per gestire gruppi di contenuti simili, come i post del blog. Le collezioni aiutano ad organizzare i tuoi documenti, a convalidare il tuo frontmatter YAML e a fornire automaticamente la sicurezza del tipo TypeScript per tutti i tuoi contenuti (anche se non scrivi alcun TypeScript tu stesso).
Preparati a…
- Sposta la tua cartella di post del blog in
src/content/
- Crea uno schema per definire il tuo frontmatter dei post del blog
- Usa
getCollection()
per ottenere contenuti e metadati dei post del blog
Prerequisiti
Sezione intitolata PrerequisitiAvrai bisogno di un progetto Astro esistente con file Markdown o MDX nella cartella src/pages/
.
Questo tutorial usa il progetto finito della guida Build a Blog per dimostrare come convertire un blog in collezioni di contenuti. Puoi fare il fork e usare quella base di codice in locale, o completare il tutorial nel browser modificando il codice della guida al blog in StackBlitz.
Puoi invece seguire questi passaggi con il tuo progetto Astro, ma dovrai adattare le istruzioni alla tua base di codice.
Ti consigliamo di utilizzare il nostro progetto di esempio per completare prima questo breve tutorial. Poi, puoi usare ciò che hai imparato per creare collezioni di contenuti nel tuo progetto.
Codice Tutorial per Creare un Blog
Sezione intitolata Codice Tutorial per Creare un BlogNella guida introduttiva Build a Blog, hai imparato il routing basato su file integrato di Astro: qualsiasi file .astro
, .md
o .mdx
ovunque nella cartella src/pages/
diventava automaticamente una pagina del tuo sito.
Per creare il tuo primo post sul blog su https://example.com/posts/post-1/
, hai creato una cartella /posts/
e aggiunto il file post-1.md
. Poi hai aggiunto un nuovo file Markdown a questa cartella ogni volta che volevi aggiungere un nuovo post al tuo sito.
Pagine Vs Collezioni
Sezione intitolata Pagine Vs CollezioniAnche quando stai usando le collezioni di contenuti, userai ancora la cartella src/pages/
per le pagine individuali, come la tua pagina About Me. Ma, spostando i tuoi post del blog nella cartella speciale src/content/
ti permetterà di usare API più potenti e performanti per generare l’indice dei post del blog e visualizzare i tuoi post del blog individuali.
Allo stesso tempo, riceverai una migliore guida e autocompletamento nel tuo editor di codice perché avrai uno schema per definire una struttura comune per ogni post che Astro ti aiuterà ad applicare. Nel tuo schema, puoi specificare quando le proprietà del frontmatter sono richieste, come una descrizione o un autore, e quale tipo di dati deve essere ogni proprietà, come una stringa o un array. Questo porta a cogliere molti errori prima, con messaggi di errore descrittivi che ti dicono esattamente qual è il problema.
Leggi di più sulle collezioni di contenuti di Astro nella nostra guida, o inizia con le istruzioni qui sotto per convertire un blog di base da src/pages/posts/
a src/content/posts/
.
Testa la tua conoscenza
Sezione intitolata Testa la tua conoscenza-
Quale pagina dovresti tenere in
src/pages/
? -
Quale non è un vantaggio dello spostamento dei post del blog in una collezione di contenuti?
-
Le collezioni di contenuto usano TypeScript per…
Estendere il blog di tutorial con le collezioni di contenuti
Sezione intitolata Estendere il blog di tutorial con le collezioni di contenutiGli step seguenti mostrano come estendere il prodotto finale della guida Build a Blog creando una collezione di contenuti per i post del blog.
Aggiorna le dipendenze
Sezione intitolata Aggiorna le dipendenze-
Aggiorna all’ultima versione di Astro, e aggiorna tutte le integrazioni alle loro ultime versioni eseguendo i seguenti comandi nel tuo terminale:
Se stai usando un tuo progetto, assicurati di aggiornare tutte le dipendenze che hai installato. Il codice di esempio della guida al blog usa solo l’integrazione Preact.
-
Il blog di tutorial usa l’impostazione TypeScript
base
(meno rigorosa). Per usare le collezioni di contenuto, devi configurare TypeScript per le collezioni di contenuto o usando l’impostazionestrict
ostrictest
, o aggiungendo due opzioni intsconfig.json
.Per usare le collezioni di contenuto senza scrivere TypeScript nel resto dell’esempio della guida al blog, aggiungi le seguenti due opzioni di configurazione TypeScript al file di configurazione:
Crea una collezione per i post del tuo blog
Sezione intitolata Crea una collezione per i post del tuo blog-
Crea una nuova collezione (cartella) chiamata
src/content/posts/
. -
Sposta tutti i tuoi post del blog esistenti (file
.md
) dasrc/pages/posts/
in questa nuova collezione. -
Crea un file
src/content/config.ts
per definire uno schema per la tuapostsCollection
. Per il codice esistente della guida al blog, aggiungi il seguente contenuto al file per definire tutte le proprietà del frontmatter usate nei post del blog:
Genera le pagine da una collezione
Sezione intitolata Genera le pagine da una collezione-
Crea un file per la pagina chiamato
src/pages/posts/[...slug].astro
. I tuoi file Markdown e MDX non diventano più automaticamente pagine usando il routing basato su file di Astro quando sono all’interno di una collezione, quindi devi creare una pagina responsabile per generare ogni singolo post del blog. -
Aggiungi il codice seguente per interrogare la tua collezione per rendere disponibile a ogni pagina che genererà lo slug e il contenuto della pagina di ogni post del blog:
-
Renderizza il tuo
<Content />
del post all’interno del layout per le pagine Markdown. Questo ti permette di specificare un layout comune per tutti i tuoi post. -
Rimuovi la definizione
layout
nel frontmatter di ogni singolo post. Il tuo contenuto è ora racchiuso in un layout quando viene renderizzato, e questa proprietà non è più necessaria.
Rimpiazza Astro.glob()
con getCollection()
Sezione intitolata Rimpiazza Astro.glob() con getCollection()-
Ovunque tu abbia una lista di post del blog, come la pagina Blog della guida (
src/pages/blog.astro/
), dovrai sostituireAstro.glob()
congetCollection()
come modo per recuperare contenuti e metadati dai tuoi file Markdown. -
Dovrai anche aggiornare i riferimenti ai dati restituiti per ogni
post
. Ora troverai i valori del frontmatter sulla proprietàdata
di ogni oggetto. Inoltre, quando si usano le collezioni, ogni oggettopost
avrà unoslug
di pagina, non un URL completo. -
Il blog di tutorial genera anche dinamicamente una pagina per ogni tag usando
src/pages/tags/[tag].astro
e visualizza un elenco di tag susrc/pages/tags/index.astro
.Applica gli stessi cambiamenti di cui sopra a questi due file:
- recupera i dati per tutti i posts del tuo blog usando
getCollection("posts")
invece diAstro.glob()
- accedi a tutti i valori di frontmatter usando
data
invece difrontmatter
- crea un URL della pagina aggiungendo lo
slug
del post al percorso/posts/
La pagina che genera individualmente le pagine dei tag diventa ora:
Prova tu - Aggiorna la query nella pagina dell’indice dei tag
Sezione intitolata Prova tu - Aggiorna la query nella pagina dell’indice dei tagImporta e usa
getCollection
per recuperare i tag usati nei post del blog susrc/pages/tags/index.astro
, seguendo gli stessi passaggi di cui sopra.Mostrami il codice.
- recupera i dati per tutti i posts del tuo blog usando
Aggiorna ogni valore di frontmatter per corrispondere allo schema
Sezione intitolata Aggiorna ogni valore di frontmatter per corrispondere allo schema-
Se necessario, aggiorna qualunque valore del frontmatter in tutto il tuo progetto, come nel tuo layout, che non corrisponde allo schema delle collezioni.
Nel blog di esempio,
pubDate
era una stringa. Ora, secondo lo schema che definisce i tipi per il frontmatter del post,pubDate
sarà un oggettoDate
.Per renderizzare la data nel layout del post del blog, convertila in una stringa:
Aggiorna la funzione RSS
Sezione intitolata Aggiorna la funzione RSS-
Per ultima cosa, il progetto di blog tutorial include un feed RSS. Questa funzione deve anche usare
getCollection()
per restituire informazioni dai tuoi post del blog. Poi genererai gli elementi RSS usando l’oggettodata
restituito.
Per l’esempio completo della guida al blog usando le collezioni di contenuto, vedi il branch Content Collections del repo della guida.
Learn