ទិន្នន័យ​ការផ្សាយ​ជាទិន្នន័យ​នៃ​ការផ្សាយ​និមួយ​ៗ​ (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,
}