Opcional: Crie uma coleção de conteúdo
Agora que você tem um blog usando o roteamento baseado em arquivos embutido no Astro, você o atualizará para usar uma coleção de conteúdo. Coleções de conteúdo são uma maneira poderosa para gerenciar grupos com conteúdo similar, como postagens de blog.
Se prepare para...
- Mova sua pasta de postagens de blog para
src/blog/
- Crie um esquema para definir o frontmatter das suas postagens de blog
- Use
getCollection()
para obter o conteúdo e metadados de postagens de blog
Aprenda: Páginas vs Coleções
Seção intitulada Aprenda: Páginas vs ColeçõesMesmo ao usar coleções de conteúdo, você ainda usará a pasta src/pages/
para páginas individuais, como a sua página Sobre Mim. Mas mover suas postagens de blog para fora desta pasta especial permitirá que você use APIs mais poderosas e eficazes para gerar o índice das postagens de blog e mostrar individualmente suas postagens de blog.
Ao mesmo tempo, você receberá melhor orientação e preenchimento automático no seu editor de código pois você terá um esquema para definir uma estrutura comum para cada postagem a qual o Astro irá assegurar através da Zod, uma biblioteca de validação e declaração de esquema para TypeScript. Em seu esquema, você pode especificar quando as propriedades frontmatter são exigidas, como uma desrição ou um autor, e cada tipo de dado que cada propriedade deve ser, como uma string ou um array. Isso leva a capturar erros mais cedo, com mensagens de erro detalhadas dizendo exatamente qual é o problema.
Leia mais sobre as coleções de conteúdo Astro em nosso guia, ou comece com as instruções abaixo para converter seu blog básico de src/pages/posts/
para src/blog/
.
Teste seu conhecimento
Seção intitulada Teste seu conhecimento-
Qual tipo de página você provavelmente manteria em
src/pages/
? -
Qual destes não é um benefício de mover postagens de blog para uma coleção de conteúdo?
-
Coleções de conteúdo usam TypeScript …
Os passos abaixo mostram como você pode estender o produto final do tutorial Construa um Blog ao criar uma coleção de conteúdo para as postagens de blog.
Atualize dependências
Seção intitulada Atualize dependênciasAtualize para a última versão do Astro, e atualize todas as integrações para as últimas versões ao executar os seguintes comandos no seu terminal:
Crie uma coleção para suas postagens
Seção intitulada Crie uma coleção para suas postagens-
Crie uma nova coleção (pasta) chamada
src/blog/
. -
Mova todos as suas postagens de blog existentes (arquivos
.md
) desrc/pages/posts/
para essa nova coleção. -
Crie um arquivo
src/content.config.ts
para definir um esquema para a suapostsCollection
. Para o código existente do tutorial do blog, adicione o seguinte conteúdo ao arquivo para definir todas as propriedades frontmatter usadas em suas postagens de blog: -
Para que Astro reconheça seu esquema, feche (
CTRL + C
) e reinicie o servidor de desenvolvimento para continuar com o tutorial. Isso definirá o móduloastro:content
.
Gere páginas de uma coleção
Seção intitulada Gere páginas de uma coleção-
Crie um arquivo de página chamado
src/pages/posts/[...slug].astro
. Seus arquivos Markdown e MDX não mais se tornarão páginas automaticamente usando o roteamento baseado em arquivos Astro quando estão dentro de uma coleção, então você precisa criar a página responsável para gerar cada postagem de blog individual. -
Adicione o seguinte código para consultar sua coleção para fazer cada slug e conteúdo de postagem de blog disponível para cada página que será gerada:
-
Forneça o
<Content />
da sua postagem dentro do layout para páginas Markdown. Isso permite que você especifique um layout comum para todas as suas postagens. -
Remova a definição
layout
do frontmatter de cada postagem individualmente. Seu conteúdo está agora envolto em um layout quando processado, e essa propriedade não é mais necessária.
Substitua import.meta.glob()
com getCollection()
Seção intitulada Substitua import.meta.glob() com getCollection()-
Em qualquer lugar que você tenha uma lista das postagens do blog, como a página de Blog do tutorial (
src/pages/blog.astro/
), você precisará substituirimport.meta.glob()
comgetCollection()
(EN) como uma maneira para obter conteúdo e metadados de seus arquivos Markdown. -
Você também precisará atualizar referências para os dados retornados de cada
post
. Você precisará agora encontrar os seus valores frontmatter na propriedadedata
de cada objeto. Além disso, ao usar coleções cada objetopost
terá uma páginaslug
, não uma URL completa. -
O projeto de blog do tutorial também gera dinamicamente uma página para cada tag usando
src/pages/tags/[tag].astro
e mostra uma lista de tags emsrc/pages/tags/index.astro
.Aplique as mesmas mudanças acima nesses dois arquivos:
- obtenha dados de todas as suas postagens de blog usando
getCollection("blog")
em vez de usarimport.meta.glob()
- acesse todos os valores frontmatter usando
data
em vez defrontmatter
- crie uma URL para página adicionando o
slug
da postagem ao caminho/posts/
A página que gera páginas de tag individuais agora se tornou:
Tente você mesmo - Atualize a consulta na página Índice de Tags
Seção intitulada Tente você mesmo - Atualize a consulta na página Índice de TagsImporte e use
getCollection
para obter as tags usadas nas postagens de blog emsrc/pages/tags/index.astro
, seguindo os mesmos passos acima.Mostre o código.
- obtenha dados de todas as suas postagens de blog usando
Atualize qualquer valor frontmatter para corresponder ao seu esquema
Seção intitulada Atualize qualquer valor frontmatter para corresponder ao seu esquemaSe necessário, atualize quaisquer valores frontmatter pelo seu projeto, como em seu layout, que não correspondam ao seu esquema de coleções.
No exemplo de blog do tutorial, pubDate
era uma string. Agora, de acordo com o esquema que define tipos para o frontmatter das postagens, pubDate
será um objeto Date
.
Você agora pode aproveitar isso para usar os métodos disponíveis em qualquer objeto Date
para formatar a data.
Para mostrar a data no layout da postagem do blog, converta ela para uma string usando o método toLocaleDateString()
:
Atualize a função RSS
Seção intitulada Atualize a função RSSO projeto de blog do tutorial inclui um feed RSS. Essa função também deve usar getCollection()
para retornar informações de suas postagens de blog. Você gerará então itens RSS usando o objeto data
retornado.
Para o exemplo completo do tutorial de blog usando coleções de conteúdo, veja a branch Coleções de Conteúdo do repositório do tutorial.