នៅក្នុងកម្មវិធី Astro ទិន្នន័យទាំងឡាយអាចត្រូវរក្សាទុកនៅក្នុងមូលដ្ឋានទិន្នន័យនៅលើ server ផ្សេងៗ ដូចជាមូលដ្ឋានទិន្នន័យ MySQL, PosgreSQL, MongoDB ជាដើម។ ក៏ប៉ុន្តែ កម្មវិធី Astro ក៏អនុញ្ញាតិអោយយើងអាចរក្សាទិន្នន័យទាំងនោះទុកនៅក្នុងថត src/content នៃកម្មវិធីគេហទំព័ររបស់យើងផ្ទាល់តែម្តងក៏បានដែរ។ ហើយទិន្នន័យដែលត្រូវរក្សាទុក ត្រូវកត់ត្រានៅក្នុងឯកសារមានប្រភេទជា MD (.md), MDX (.mdx), ឬ YAML (.yaml) ។
មុននឹងអាចរក្សាឯកសារដែលជាទិន្នន័យទាំងឡាយទុកនៅក្នុងថត src/content នេះបាន យើងចាំបាច់ត្រូវធ្វើការកែប្រែឯកសារ tsconfig.json ដូចខាងក្រោមនេះ៖
// tsconfig.json
{
"extends": "astro/tsconfigs/base",
"compilerOptions": {
"strictNullChecks": true
}
}
បន្ទាប់មកទៀត យើងត្រូវបង្កើតឯកសារមួយមានឈ្មោះថា config.ts ដែលនៅក្នុងនោះ យើងត្រូវបង្កើត schema សំរាប់ទិន្នន័យរបស់យើង។
// src/content/config.ts
import { z, defineCollection } from 'astro:content'
const postCollection = defineCollection({
type: 'content', // v2.5.0 and later
schema: z.object({
title: z.string(),
author: z.string(),
image: z.string().optional(),
}),
})
export const collections = {
'posts': postCollection,
}
---
title: "ការផ្សាយលើកទី ១"
author: "កែវ សុភ័ក្រ"
---
<!--src/content/posts/post-1.md-->
## ឯកសារទី ១
បើសិនជាកម្មវិធី Astro មិនអាចរកឃើញសាស្ត្រា astro:content នេះទេ យើងត្រូវសាកល្បងដំណើរការសារជាថ្មីឡើងវិញនូវកម្មវិធីគេហទំព័ររបស់យើង។
កូដខាងលើនេះគ្រាន់តែជាឧទាហរណ៍ដ៏តូចមួយនៃការបង្កើត schema ឬទំរង់នៃប្រភេទទិន្នន័យសំរាប់បណ្តុំទិន្នន័យ “posts” នៅក្នុងថត src/content ។ នៅក្នុងកម្មវិធីជាក់ស្តែង schema អាចមានច្រើនជាងនេះ។
អត្ថប្រយោជន៍នៃការបង្កើត schema គឺវាជួយត្រួតពិនិត្យឯកសារដែលជាទិន្នន័យរបស់យើងថាតើឯកសារនោះមានទិន្នន័យនៅក្នុង frontmatter មានចំនួននិងប្រភេទសមស្របទៅតាម schema ដែរឬទេ។ បើមិនសមស្របទេ វានឹងប្រាប់យើងពីកំហុសផ្សេងៗនៅក្នុង frontmatter ។
កម្មវិធី Astro ប្រើប្រាស់កញ្ចប់ Zod នៅក្នុងការបង្កើត schema ហើយការនាំចូលកញ្ចប់នេះ ត្រូវតាងដោយអក្សរ z ។ បើយើងចង់បានព័ត៌មានបន្ថែមស្តីពីកញ្ចប់ Zod យើងអាចចូលទៅអានគេហទំព័រមួយនេះ https://zod.dev/ ។
បើសិនជាយើងមានបណ្តុំទិន្នន័យពីរ យើងអាចបង្កើត schema នៃបណ្តុំទិន្នន័យមួយដោយយោងទៅលើបណ្តុំទិន្នន័យមួយទៀតបាន។
// src/content/config.ts
import { z, defineCollection, reference } from 'astro:content'
const authorCollection = defineCollection({
type: 'content',
schema: z.object({
name: z.string(),
email: z.string().email()
})
})
const postCollection = defineCollection({
type: 'content', // v2.5.0 and later
schema: z.object({
title: z.string(),
author: reference('authors'),
image: z.string().optional(),
}),
})
export const collections = {
'posts': postCollection,
'authors': authorCollection,
}
---
title: "ការផ្សាយលើកទី ១"
author: "author-1"
---
<!--src/content/posts/post-1.md-->
## ឯកសារទី ១
---
name: "កែវ សុភ័ក្រ"
email: "sophak@gmail.com"
---
<!--src/content/authors/author-1.md-->
## អ្នកនិពន្ធទី ១