Работа с Content Collections в Astro
Полное руководство по использованию Content Collections для организации контента
Что такое Content Collections?
Content Collections — это встроенная функция Astro для организации и типизации контента. Она позволяет:
- Валидировать frontmatter с помощью Zod
- Получать типобезопасный доступ к контенту
- Автоматически генерировать TypeScript типы
Определение коллекций
Создайте файл src/content/config.ts:
import { defineCollection, z } from 'astro:content';
const blogCollection = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
description: z.string(),
publishedAt: z.coerce.date(),
tags: z.array(z.string()).default([]),
}),
});
export const collections = {
blog: blogCollection,
};
Получение контента
Все записи коллекции
import { getCollection } from 'astro:content';
const allPosts = await getCollection('blog');
const publishedPosts = await getCollection('blog', ({ data }) => {
return data.draft !== true;
});
Одна запись
import { getEntry } from 'astro:content';
const post = await getEntry('blog', 'my-article');
Рендеринг контента
---
import { getEntry } from 'astro:content';
const post = await getEntry('blog', 'my-article');
const { Content } = await post.render();
---
<article>
<h1>{post.data.title}</h1>
<Content />
</article>
Советы
- Используйте .default() для опциональных полей
- Применяйте z.coerce.date() для автоматического парсинга дат
- Создавайте отдельные коллекции для разных типов контента