9.8 KiB
9.8 KiB
ระบบ CMS Pages และ Section Block ของ DBK Platform
Platform scope: HomAroma content blocks are reference-tenant examples, not a restriction on tenant verticals. See
docs/PLATFORM_OVERVIEW.md.
การทำงานของระบบ CMS Pages และ Section Block
ระบบนี้ออกแบบมาในรูปแบบของ Dynamic Page Builder หรือ Headless CMS ที่ให้ผู้ใช้งานสามารถประกอบหน้าเว็บ (Page) ได้เองโดยการเรียงต่อ Block (Section) ต่างๆ เข้าด้วยกัน โดยมีโครงสร้างการทำงานหลักๆ ดังนี้:
-
Database Structure:
Page: เก็บข้อมูลพื้นฐานของหน้าเว็บ เช่นslug,title, สถานะการเผยแพร่ เป็นต้นPageSection: เก็บข้อมูลของแต่ละ Block ภายในหน้านั้นๆ โดยมีความสัมพันธ์แบบ 1-to-many กับPage(1 หน้ามีได้หลาย Section)
-
การจัดเก็บข้อมูล (Data Storage):
- แต่ละ
PageSectionจะมีฟิลด์typeเพื่อระบุว่า Block นี้คือ Component อะไร (เช่นHERO,TEXT,PRODUCTS) - ข้อมูลเนื้อหาและตั้งค่าของแต่ละ Block จะถูกเก็บไว้ในฟิลด์
payloadในรูปแบบ JSON ซึ่งทำให้มีความยืดหยุ่นสูง สามารถรองรับโครงสร้างข้อมูลที่แตกต่างกันของแต่ละ Block ได้โดยไม่ต้องแก้ Schema ฐานข้อมูล
- แต่ละ
-
โครงสร้างของ 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) optionaldescription(localized string) optionalbuttonText(localized string) optional
3. TEXT
- หน้าที่: Block สำหรับแสดงข้อความธรรมดา
- ค่าใน Payload:
title(localized string) optionalcontent(localized string)textAlign(plain string) optional:left,center,right
4. ANNOUNCEMENT_BAR
- หน้าที่: แถบประกาศข้อความด้านบนสุดที่สามารถเลื่อน (Rotate) ได้
- ค่าใน Payload:
slides(array of localized strings)backgroundColor(plain string) optionaltextColor(plain string) optionalspeed(number) optional
5. NEWSLETTER
- หน้าที่: ฟอร์มรับสมัครรับข่าวสาร (Newsletter)
- ค่าใน Payload:
title(localized string)description(localized string)buttonText(localized string)placeholderText(plain string) optionalshowPrivacyCheckbox(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หรือrightbuttonText(plain string) optionalbuttonLink(plain string) optionalbackgroundColor(plain string) optionaltextColor(plain string) optional
7. EDITORIAL_CAROUSEL
- หน้าที่: สไลด์แสดงเนื้อหาบทความแบบเรื่องราว (Storytelling)
- ค่าใน Payload:
title(localized string)slides(array of objects): แต่ละสไลด์มีcategory(localized string)title(localized string)description(localized string)imageUrl(plain string)buttonText(plain string) optionalbuttonLink(plain string) optional
8. PRODUCTS
- หน้าที่: แสดงรายการสินค้าแบบ Grid หรือลิสต์
- ค่าใน Payload:
title(localized string)subtitle(localized string) optionaltype(plain string):featured,scent, หรือcustomscentId(number) optionalproductIds(array of numbers) optionallimit(number) optionallayout(plain string) optional:gridหรือcarouselenableQuickShop(boolean) optional
9. CATEGORIES
- หน้าที่: แสดงหมวดหมู่สินค้า
- ค่าใน Payload:
title(localized string)subtitle(localized string) optionalcategoryIds(array of numbers) optional
10. HERO_ARTICLE
- หน้าที่: ส่วนหัวของบทความ (Article Header)
- ค่าใน Payload:
title(localized string)subtitle(localized string) optionalauthor(localized string) optionalcategory(localized string) optionalpublishDate(plain string) optionaldate(plain string) optionalimageUrl(plain string)backgroundImageUrl(plain string) optionaloverlayColor(plain string) optional
11. RICH_TEXT
- หน้าที่: Block สำหรับเนื้อหาแบบ HTML ที่สามารถจัดรูปแบบได้
- ค่าใน Payload:
title(localized string) optionalcontent(localized string) required (รองรับ HTML)
12. SCENT_NOTES_BREAKDOWN
- หน้าที่: อธิบายเลเยอร์ของกลิ่นน้ำหอม (Top, Heart/Middle, Base Notes)
- ค่าใน Payload:
title(localized string) optionaldescription(localized string) optionaltopNotes(array of strings or localized string objects)heartNotes(array of strings or localized string objects) หมายเหตุ: ผูกรวมกับ middleNotesmiddleNotes(array of strings or localized string objects)baseNotes(array of strings or localized string objects)
13. QUOTE_CALLOUT
- หน้าที่: แสดงคำคมหรือข้อความเน้นพิเศษ
- ค่าใน Payload:
quote(localized string) requiredauthor(localized string) optionalrole(localized string) optional
14. PRODUCT_CAROUSEL
- หน้าที่: แสดงสินค้าที่แนะนำในรูปแบบ Carousel
- ค่าใน Payload:
title(localized string) optionaldescription(localized string) optionalcollectionId(plain string) optionallimit(number) optionalshowPrice(boolean) optionalshowAddToCart(boolean) optionalproducts(optional explicit product list)
15. ACCORDION
- หน้าที่: แสดงข้อมูลแบบถาม-ตอบ หรือเนื้อหาที่พับเก็บได้ (FAQ)
- ค่าใน Payload:
title(localized string) optionalcategories(required array): แต่ละหมวดหมู่มีname(localized string)icon(plain string) optionalquestions(required array): แต่ละคำถามมีq(localized string)a(localized string)
16. CONTACT_INFO
- หน้าที่: แสดงข้อมูลการติดต่อ (ที่อยู่, อีเมล, Line ฯลฯ)
- ค่าใน Payload:
title(localized string) optionaladdress(localized string) requiredemail(plain string) requiredline(plain string) requiredhours(localized string) required
17. CONTACT_FORM
- หน้าที่: ส่วนหัวสำหรับแบบฟอร์มการติดต่อ
- ค่าใน Payload:
title(localized string) optionalsubtitle(localized string) optional