ទិន្នន័យការផ្សាយជាទិន្នន័យនៃការផ្សាយនិមួយៗ (post) ។ ការបង្កើតទិន្នន័យនេះ ទាមទារអោយយើងចាំបាច់ត្រូវបង្កើត schema មួយសំរាប់ទិន្នន័យនេះជាមុនសិន។ schema មានតួនាទីសំខាន់ក្នុងការត្រួតពិនិត្យ fontmatter នៃគ្រប់ឯកសារ MD ទាំងអស់ថាតើវាពិតជាគោរពទៅតាមប្រភេទនិងចំនួននៃទិន្នន័យមាននៅក្នុង schema ដែរឬទេ។ បើមិនត្រឹមត្រូវទេ កម្មវិធី Astro នឹងប្រាប់យើងពីកំហុសនេះ។ schema អាចត្រូវបង្កើតនៅក្នុងឯកសារ src/content/config.ts ។
// src/content/config.ts
import { z, defineCollection, reference } from 'astro:content'
const postCollection = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
categories: z.array(z.string()),
thumb: z.string(),
pudate: z.date(),
videos: reference('videos'),
author: reference('authors'),
}),
})
export const collections = {
'posts': postCollection,
}
នៅក្នុង schema នៃទិន្នន័យនៃការផ្សាយខាងលើនេះ យើងឃើញថាទិន្នន័យ videos និង author ត្រូវបានកំណត់ឡើងដោយយោងទៅលើបណ្តុំទិន្នន័យ videos និង authors រៀងគ្នា។ ដូចនេះ យើងចាំបាច់ត្រូវបង្កើតបណ្តុំទិន្នន័យទាំងពីរនេះទៀត ទើបអាចយកទិន្នន័យការផ្សាយទៅប្រើប្រាស់បាន។ schema នៃបណ្តុំទិន្នន័យ videos និង authors អាចត្រូវបង្កើតឡើងនៅក្នុងឯកសារ src/content/config.ts តែមួយដូចខាងក្រោមនេះ៖
// src/content/config.ts
import { z, defineCollection, reference } from 'astro:content'
const postCollection = defineCollection({
type: 'content',
schema: z.object({
title: z.string(),
categories: z.array(z.string()),
thumb: z.string(),
pudate: z.date(),
videos: reference('videos'),
author: reference('authors'),
}),
})
const videoCollection = defineCollection({
type: 'data',
schema: z.object({
videos: z.array(z.object({
vidType: z.string(),
id: z.string(),
status: z.string(),
}))
})
})
const authorCollection = defineCollection({
type: 'content',
schema: z.object({
name: z.string(),
role: z.string(),
thumb: z.string().optional(),
pudate: z.date(),
email: z.string().email(),
password: z.string(),
})
})
export const collections = {
'posts': postCollection,
'videos': videoCollection,
'authors': authorCollection,
}