ដូច​គ្នា​នឹង​គំរូ​ទំព័រ​ដទៃ​ទៀត​ដែរ យើង​អាច​បង្កើត​គំរូ​ទំព័រ​ការផ្សាយ​នៅ​ក្នុង​ថត src/layouts និង​នាំ​ចូល​គំរូទំព័រ​​នេះទៅ​ក្នុង​ទំព័រ​ឌីណាមិក​ដែលមាន​​ប៉ារ៉ាម៉ែត​ជា​អ្វី​ក៏​បាន មាន​ដូច​ជា [slug].astro ជា​ដើម​។ បើ​យើង​បង្កើត​ថត​ឈ្មោះ post មួយ​នៅ​ក្នុង​ថត src/pages ហើយ​បញ្ចូល​ឯកសារ [slug].astro ទៅ​ក្នុង​នោះ ផ្លូវ​ចូល​ទៅ​កាន់ឯកសារ​នេះ​គឺ /post/[slug] ដែល​នៅ​ក្នុង​នោះ [slug] គឺ​ជា​ប៉ារ៉ាម៉ែត​សំរាប់​ទទួល​យក​ឈ្មោះ​របស់​ឯកសារ​ដែល​ជា​ទិន្នន័យ​និមួយ​ៗ​។ នៅ​ពេលត្រូវ​​យក​ទៅ​ប្រើ គំរូទំព័រ​ការផ្សាយ​នឹង​​ទទួល​បាន​នូវសំណុំ​ទិន្នន័យ​មួយ​ទាក់ទង​នឹង​ទំព័រ​ត្រូវ​បង្ហាញ​ដល់​អ្នកអាន​។ យើង​អាច​ស្រង់​យក​បណ្តា​ទិន្នន័យ​ទាំងឡាយ​នៅ​ក្នុង​សំណុំ​ទិន្នន័យ​នេះ មក​រៀបរៀង​ជា​ទំព័រ​​បង្ហាញ​ដល់​អ្នក​អាន​។

 

<!--src/layouts/Post.astro-->
---
import { getEntry } from 'astro:content'
const { post } = Astro.props
const { Content } = await post.render()
const author = await getEntry(post.data.author)
const videos = await getEntry(post.data.videos)
---
<section class="Ad region">
    <img src="/images/ad.jpg" />
    <img src="/images/ad.jpg" />
</section>

<section class="Post region">
    <div class="main">
        <h3 class="title">{post.data.title}</h3>
        <div class="categories">
            <span>​​​​​​​​​ជំពូកៈ {post.data.categories.join(', ')}</span>
            <span>{post.data.pudate.toLocaleDateString('it-IT')}</span>
        </div>
        <div class="author">
            <span>អ្នក​​​​​​​​​​រៀបរៀងៈ {author.data.name}</span>
        </div>
        <div class="content"><Content/></div>
    </div>
    <div class="sidebar">
        ផ្សាយ​ពាណិជ្ជកម្ម
    </div>

</section>

<style is:global>
.Ad{
    display: grid;
    grid-template-columns: repeat(2, auto);
    grid-gap: 10px;
}
.Ad img{
    width: 100%;
}
.Post{
    margin-top: 20px;
    display: grid;
    grid-template-columns: 70% auto;
    grid-gap: 15px;
}
.Post .main, .Post .sidebar{
    background-color: rgb(231, 223, 223);
    color: rgb(22, 22, 22);
    padding: 15px;
}
.Post .sidebar{
    text-align: center;
    padding: 0;
}
.Post .main .title{
    font: 18px/1.5 Oswald, Koulen;
    margin-bottom: 20px;
}
.Post .main .categories span:nth-child(2){
    float: right;
}
.Post .main .author{
    margin-bottom: 30px;
}

@media only screen and (max-width:600px){
    .Ad{
        grid-template-columns: 100%;
    }
    .Post{
        grid-template-columns: 100%;
    }
}
</style>

 

<!--src/pages/[page].astro-->
---
import Base from "../layouts/Base.astro"
import Pagination from "../components/Pagination.astro"
import { getCollection } from 'astro:content'
export async function getStaticPaths({paginate}){
    const Posts = await getCollection('posts')
    Posts.sort((a, b)=>b.data.pudate-a.data.pudate)
    const posts = Posts.slice()
    return paginate(posts, {pageSize: 24})
}
const { page } = Astro.props
---
<Base pageTitle="ទំព័រ​ដើម" pageURL="/" >
    <Pagination page={page}/>
</Base>

 

Netlify: https://khmerweb-static-blog.netlify.app

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