Files
homaroma/goal.section.md
T
2026-10-01 05:49:58 +07:00

9.8 KiB

ระบบ CMS Pages และ Section Block ของ DBK Platform

Platform scope: HomAroma content blocks are reference-tenant examples, not a restriction on tenant verticals.

การทำงานของระบบ CMS Pages และ Section Block

ระบบนี้ออกแบบมาในรูปแบบของ Dynamic Page Builder หรือ Headless CMS ที่ให้ผู้ใช้งานสามารถประกอบหน้าเว็บ (Page) ได้เองโดยการเรียงต่อ Block (Section) ต่างๆ เข้าด้วยกัน โดยมีโครงสร้างการทำงานหลักๆ ดังนี้:

  1. Database Structure:

    • Page: เก็บข้อมูลพื้นฐานของหน้าเว็บ เช่น slug, title, สถานะการเผยแพร่ เป็นต้น
    • PageSection: เก็บข้อมูลของแต่ละ Block ภายในหน้านั้นๆ โดยมีความสัมพันธ์แบบ 1-to-many กับ Page (1 หน้ามีได้หลาย Section)
  2. การจัดเก็บข้อมูล (Data Storage):

    • แต่ละ PageSection จะมีฟิลด์ type เพื่อระบุว่า Block นี้คือ Component อะไร (เช่น HERO, TEXT, PRODUCTS)
    • ข้อมูลเนื้อหาและตั้งค่าของแต่ละ Block จะถูกเก็บไว้ในฟิลด์ payload ในรูปแบบ JSON ซึ่งทำให้มีความยืดหยุ่นสูง สามารถรองรับโครงสร้างข้อมูลที่แตกต่างกันของแต่ละ Block ได้โดยไม่ต้องแก้ Schema ฐานข้อมูล
  3. โครงสร้างของ Payload:

    • localized string: รองรับหลายภาษา มักจะเป็น Object เช่น { "th": "...", "en": "..." }
    • plain string: ค่าข้อความธรรมดาที่ไม่ต้องแปล
    • optional: ข้อมูลที่สามารถเว้นว่างได้

รายการ Section Block ทั้งหมด (17 Blocks)

ปัจจุบันระบบรองรับ Block Section ทั้งหมด 17 ประเภท โดยแต่ละประเภทมีค่า (Payload) ดังต่อไปนี้:

1. HERO

  • หน้าที่: แบนเนอร์หลักขนาดใหญ่สำหรับส่วนบนสุดของหน้า (เหมาะสำหรับหน้าแรกหรือแคมเปญ)
  • ค่าใน Payload:
    • tagline (localized string)
    • title (localized string)
    • description (localized string)
    • imageUrl (plain string)
    • buttonText (localized string)
    • buttonLink (plain string)

2. BANNER

  • หน้าที่: รูปภาพแบนเนอร์แนวนอนพร้อมปุ่มกด (Call to Action)
  • ค่าใน Payload:
    • imageUrl (plain string)
    • linkUrl (plain string)
    • title (localized string) optional
    • description (localized string) optional
    • buttonText (localized string) optional

3. TEXT

  • หน้าที่: Block สำหรับแสดงข้อความธรรมดา
  • ค่าใน Payload:
    • title (localized string) optional
    • content (localized string)
    • textAlign (plain string) optional: left, center, right

4. ANNOUNCEMENT_BAR

  • หน้าที่: แถบประกาศข้อความด้านบนสุดที่สามารถเลื่อน (Rotate) ได้
  • ค่าใน Payload:
    • slides (array of localized strings)
    • backgroundColor (plain string) optional
    • textColor (plain string) optional
    • speed (number) optional

5. NEWSLETTER

  • หน้าที่: ฟอร์มรับสมัครรับข่าวสาร (Newsletter)
  • ค่าใน Payload:
    • title (localized string)
    • description (localized string)
    • buttonText (localized string)
    • placeholderText (plain string) optional
    • showPrivacyCheckbox (boolean)
    • privacyText (plain string) optional

6. EDITORIAL_TILE

  • หน้าที่: แสดงเนื้อหาแบบช่องภาพคู่กับข้อความ (Side-by-side)
  • ค่าใน Payload:
    • title (localized string)
    • description (localized string)
    • imageUrl (plain string)
    • imagePosition (plain string): left หรือ right
    • buttonText (plain string) optional
    • buttonLink (plain string) optional
    • backgroundColor (plain string) optional
    • textColor (plain string) optional
  • หน้าที่: สไลด์แสดงเนื้อหาบทความแบบเรื่องราว (Storytelling)
  • ค่าใน Payload:
    • title (localized string)
    • slides (array of objects): แต่ละสไลด์มี
      • category (localized string)
      • title (localized string)
      • description (localized string)
      • imageUrl (plain string)
      • buttonText (plain string) optional
      • buttonLink (plain string) optional

8. PRODUCTS

  • หน้าที่: แสดงรายการสินค้าแบบ Grid หรือลิสต์
  • ค่าใน Payload:
    • title (localized string)
    • subtitle (localized string) optional
    • type (plain string): featured, scent, หรือ custom
    • scentId (number) optional
    • productIds (array of numbers) optional
    • limit (number) optional
    • layout (plain string) optional: grid หรือ carousel
    • enableQuickShop (boolean) optional

9. CATEGORIES

  • หน้าที่: แสดงหมวดหมู่สินค้า
  • ค่าใน Payload:
    • title (localized string)
    • subtitle (localized string) optional
    • categoryIds (array of numbers) optional

10. HERO_ARTICLE

  • หน้าที่: ส่วนหัวของบทความ (Article Header)
  • ค่าใน Payload:
    • title (localized string)
    • subtitle (localized string) optional
    • author (localized string) optional
    • category (localized string) optional
    • publishDate (plain string) optional
    • date (plain string) optional
    • imageUrl (plain string)
    • backgroundImageUrl (plain string) optional
    • overlayColor (plain string) optional

11. RICH_TEXT

  • หน้าที่: Block สำหรับเนื้อหาแบบ HTML ที่สามารถจัดรูปแบบได้
  • ค่าใน Payload:
    • title (localized string) optional
    • content (localized string) required (รองรับ HTML)

12. SCENT_NOTES_BREAKDOWN

  • หน้าที่: อธิบายเลเยอร์ของกลิ่นน้ำหอม (Top, Heart/Middle, Base Notes)
  • ค่าใน Payload:
    • title (localized string) optional
    • description (localized string) optional
    • topNotes (array of strings or localized string objects)
    • heartNotes (array of strings or localized string objects) หมายเหตุ: ผูกรวมกับ middleNotes
    • middleNotes (array of strings or localized string objects)
    • baseNotes (array of strings or localized string objects)

13. QUOTE_CALLOUT

  • หน้าที่: แสดงคำคมหรือข้อความเน้นพิเศษ
  • ค่าใน Payload:
    • quote (localized string) required
    • author (localized string) optional
    • role (localized string) optional
  • หน้าที่: แสดงสินค้าที่แนะนำในรูปแบบ Carousel
  • ค่าใน Payload:
    • title (localized string) optional
    • description (localized string) optional
    • collectionId (plain string) optional
    • limit (number) optional
    • showPrice (boolean) optional
    • showAddToCart (boolean) optional
    • products (optional explicit product list)

15. ACCORDION

  • หน้าที่: แสดงข้อมูลแบบถาม-ตอบ หรือเนื้อหาที่พับเก็บได้ (FAQ)
  • ค่าใน Payload:
    • title (localized string) optional
    • categories (required array): แต่ละหมวดหมู่มี
      • name (localized string)
      • icon (plain string) optional
      • questions (required array): แต่ละคำถามมี
        • q (localized string)
        • a (localized string)

16. CONTACT_INFO

  • หน้าที่: แสดงข้อมูลการติดต่อ (ที่อยู่, อีเมล, Line ฯลฯ)
  • ค่าใน Payload:
    • title (localized string) optional
    • address (localized string) required
    • email (plain string) required
    • line (plain string) required
    • hours (localized string) required

17. CONTACT_FORM

  • หน้าที่: ส่วนหัวสำหรับแบบฟอร์มการติดต่อ
  • ค่าใน Payload:
    • title (localized string) optional
    • subtitle (localized string) optional