9.6 KiB
9.6 KiB
ระบบ CMS Pages และ Section Block ของ HomAroma
การทำงานของระบบ 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