içeriğe atla

Astro content collections nasıl çalışıyor

güncellendi gelişiyor

İki parça var: bir loader, bir şema. Loader dosyaları nereden okuyacağını söylüyor, şema içindeki frontmatter’ın neye benzemesi gerektiğini.

const blog = defineCollection({
  loader: glob({ base: './src/content/blog', pattern: '**/*.md' }),
  schema: z.object({
    title: z.string(),
    pubDate: z.coerce.date(),
  }),
});

glob loader’ı Astro 5 ile geldi, ondan önceki type: 'content' yaklaşımının yerini aldı. Fark şu: eskiden koleksiyonlar src/content/ altındaki klasör adlarına bağlıydı, şimdi loader’ı sen veriyorsun ve içerik başka bir yerden, hatta bir API’den de gelebiliyor.

z.coerce.date() kısmı önemli. YAML frontmatter’daki 2026-08-01 bir string olarak geliyor, coerce onu Date’e çeviriyor. Düz z.date() yazarsan build kırılıyor.

Emin olmadığım kısım

Şemadaki .max(160) gibi kısıtların hata mesajları build çıktısında hangi dosyayı gösterdiğini henüz test etmedim. Dosya adını veriyorsa iyi, sadece koleksiyon adını veriyorsa büyük koleksiyonlarda can sıkıcı olur.