ក្រោយ​ទំព័រ​ស្តាទិក​ត្រូវ​បាន​បង្កើត​រួច​ហើយ យើង​អាច​ស្រង់​យក​ទំព័រ​ទាំងនោះ​មក​បង្ហាញ​នៅ​ផ្នែក​ខាង​ក្រោម​នៃ​ទំព័រ​គ្រប់គ្រង​អាស្រ័យ​ទៅ​តាម​ចំនួន​កំណត់​សំរាប់​ទំព័រ​និមួយ​ៗ​។ ការស្រង់​យក​ទិន្នន័យ​នៃ​ទំព័រ​​ស្តាទិក​អាច​ត្រូវ​ធ្វើ​ឡើង​តាម​វិធី​ច្រើន​របៀប យើង​អាច​ប្រើរបៀបស្រង់​យក​ទិន្នន័យ​នៃ​ទំព័រ​នេះ​នៅ​ក្នុង​ឯកសារ index.astro នៅ​ក្នុង​ថត src/pages/admin/page ។

 

<!--src/pages/admin/page/index.astro-->
---
import Base from "../../../layouts/admin/Base.astro"
import Page from "../../../layouts/admin/Page.astro"
const { userAuth, prisma, setting } = Astro.locals
if(!userAuth?.userId){ return Astro.redirect('/login') }

import page from "../../../data/page.js"
const total = await page.count({prisma})
const numberPage = Math.ceil(total/setting.adminItems)
const currentPage = Astro.url.searchParams.get('page') || ''
const pagination = {total, numberPage, currentPage}
if(currentPage){
    var items = await page.paginate({prisma, currentPage}, setting.adminItems)
}else{
    var items = await page.getItems({prisma}, setting.adminItems)
}
const pages = items.map((page)=>{page.date = new Date(page.date).toLocaleDateString('it-IT')
                                return page })
---

<Base pageTitle="ទំព័រ​ស្តាទិក" pagination={pagination} items={pages} type="page">
    <Page/>
</Base>

 

// src/data/page.js

class Page{
    async count(req, query={}){
        return await req.prisma.page.count(query)
    }

    async create(req){
        const new_page = {
            title: req.body.title,
            content: req.body.content,
            thumb: req.body.thumb,
            date: req.body.datetime,
        }
        
        await req.prisma.page.create({ data: new_page })
    }

    async delete(req){
        await req.prisma.page.delete({ where: {id: req.params.id } })
    }

    async getItems(req, amount){
        return await req.prisma.page.findMany({ 
            take: amount, 
            orderBy: [{ date: "desc" }, { id: "desc" }]
        })
    }

    async paginate(req, amount){
        const pages = await req.prisma.page.findMany({ 
            orderBy: [{ date: "desc" }, { id: "desc" }],
            skip: amount * (parseInt(req.currentPage) - 1),
            take: amount
        })

        return pages
    }
}

export default new Page()

 

Netlify: https://khmerweb-dynamic-blog.netlify.app/admin/page

GitHub: https://github.com/Sokhavuth/dynamic-blog