demo2

สรุปคำถาม: ใน Grav CMS เห็นแต่การสร้าง Page ธรรมดา แต่อยากทำเป็นระบบ Blog (มีหน้ารวมบทความและหน้าเนื้อหาย่อย) ต้องเริ่มต้นจัดโครงสร้างอย่างไร 🤔📝

คำถามนี้ยอดเยี่ยมและตรงจุดหัวใจของ Grav เลยครับ! 👏✨ คนส่วนใหญ่ที่เพิ่งลอง Grav จะติดภาพว่ามีแต่หน้า Page นิ่งๆ เพราะ Grav ไม่ได้แยกชนิดโพสต์เหมือน WordPress แต่มันใช้แนวคิด Parent-Child Collection ครับ 🚀

หลักการง่ายมาก: "โฟลเดอร์แม่ทำหน้าที่รวมบทความ (Blog Listing) ส่วนโฟลเดอร์ลูกคือเนื้อหาแต่ละบทความ (Blog Items)" 📂💡


โครงสร้างโฟลเดอร์ตัวอย่าง 📁

ในไดเรกทอรี user/pages/ ให้จัดเรียงลำดับโฟลเดอร์ตามนี้:

user/pages/
├── 01.home/
│   └── default.md
└── 02.blog/                 <-- หน้าแม่ (หน้ารวมบทความ)
    ├── blog.md              <-- เรียกใช้ Template "blog"
    ├── post-01/             <-- บทความที่ 1 (โฟลเดอร์ย่อย)
    │   └── item.md          <-- เรียกใช้ Template "item"
    └── post-02/             <-- บทความที่ 2 (โฟลเดอร์ย่อย)
        └── item.md

ทริกสำคัญ: ชื่อไฟล์ .md จะไปจับคู่กับไฟล์ Twig Template โดยอัตโนมัติ (เช่น blog.md จะใช้ blog.html.twig, item.md จะใช้ item.html.twig) 🎨


ขั้นตอนการตั้งค่า 3 สเต็ป 🛠️

1. ตั้งค่าหน้าแม่ (02.blog/blog.md) 🏠📑

ไฟล์นี้ทำหน้าที่สั่งให้ระบบไป "กวาด" โฟลเดอร์ลูกๆ ทั้งหมดมาแสดงเป็นลิสต์ โดยกำหนดตัวแปร content.items ใน YAML Header:

---
title: บล็อกของฉัน
content:
    items: '@self.children'   # สั่งให้ดึงหน้าลูกทั้งหมดในโฟลเดอร์นี้
    order:
        by: date             # เรียงตามวันที่
        dir: desc            # ล่าสุดขึ้นก่อน
    limit: 5                 # แสดงหน้าละ 5 บทความ
    pagination: true         # เปิดใช้ระบบแบ่งหน้า (Pagination)
---
# ยินดีต้อนรับสู่บล็อก ☕
ข้อความเกริ่นนำก่อนเข้าสู่รายการบทความ...

2. สร้างบทความย่อย (02.blog/post-01/item.md) ✍️📰

ในแต่ละโฟลเดอร์ลูก ให้สร้างไฟล์ชื่อ item.md พร้อมระบุข้อมูลเมตา:

---
title: เริ่มต้นใช้งาน Grav CMS แบบชิลๆ
date: 2026-11-08 10:00
taxonomy:
    category: [tech]
    tag: [grav, cms, php]
---
เนื้อหาบทความแบบเต็ม เขียนด้วย Markdown ได้สบายๆ...

3. ตรวจสอบธีมที่ใช้งาน (Theme Support) 🎨🖥️

ธีมเริ่มต้นส่วนใหญ่ของ Grav (เช่น Quark) มีไฟล์ templates/blog.html.twig และ templates/item.html.twig มาให้อยู่แล้ว เมื่อตั้งชื่อไฟล์ตรงกัน ระบบจะแสดงผลหน้ารวมบล็อก มีระบบแบ่งหน้า (Pagination) และแท็กหมวดหมู่ให้ทันทีแบบมืออาชีพ ⚡🚀


ถ้าทำผ่านหน้าต่าง Grav Admin Plugin (GUI):

  • กด Add Page ➕
  • ตั้งชื่อโฟลเดอร์ เช่น Blog
  • ตรงช่อง Page Template ให้เปลี่ยนจาก Default เป็น Blog แล้วบันทึก จากนั้นสร้างหน้าลูกข้างในโดยเลือก Template เป็น Item ครับ สะดวกมาก! 🖥️✨