ข้ามไปยังเนื้อหา

การจัดการเนื้อหา

CMS ของ Proyecta คือ data layer หลัก ของแอปคุณ — ไม่ใช่แค่บล็อกโพสต์และเนื้อหาการตลาด แต่คือข้อมูลจริงที่แอปของคุณสร้างขึ้นมาบนนั้น Collections ถูกสร้างและเติมด้วยเนื้อหาตัวอย่างจริง ก่อนที่ UI จะมีอยู่ ทำให้แอปของคุณเชื่อมต่อกับข้อมูลที่แก้ไขได้ตั้งแต่ build แรก

แอป Proyecta ส่วนใหญ่จัดเก็บข้อมูลไว้ใน CMS ที่ติดตั้งมาพร้อมกัน เมื่อคุณอธิบายแอปของคุณ Proyecta จะออกแบบ data model สร้าง collections ที่จำเป็น และเติมด้วยเนื้อหาตัวอย่างที่สมจริง — ทั้งหมดนี้ก่อนที่จะสร้างหน้าเดียว จากนั้นหน้าเว็บของคุณจะอ่านเนื้อหาจริงที่เจ้าของแก้ไขได้ผ่าน typed hooks ที่ AI เชื่อมต่อให้คุณ สำหรับภาพรวมของวิธีที่ทุกอย่างทำงานร่วมกัน ดูที่ วิธีที่ข้อมูลของแอปคุณทำงาน

คุณไม่จำเป็นต้องคิดถึงเรื่องนี้เลยเพื่อเริ่มต้น — มันเกิดขึ้นโดยอัตโนมัติ หน้านี้อธิบายสิ่งที่อยู่เบื้องหลังเพื่อให้คุณปรับแต่งได้

เนื้อหาถูกจัดระเบียบเป็น collections และ singletons:

ประเภท คืออะไร ตัวอย่าง
Collection ประเภทเนื้อหาที่มีหลาย entries — schema เดียว หลาย rows posts, services, testimonials, catalogItems
Singleton ประเภทเนื้อหาที่มี entry เดียวเท่านั้น — เนื้อหาระดับ global ที่ไม่ซ้ำกัน businessInfo, seoSettings

Collection คือ รูปแบบ และแต่ละ entry คือหนึ่งรายการของรูปแบบนั้น (บล็อกโพสต์หนึ่งรายการ, บริการหนึ่งรายการ, FAQ หนึ่งรายการ) Singleton เก็บ record ที่แก้ไขได้เพียงหนึ่งเดียว — ข้อมูลตัวตนของธุรกิจคุณ หรือเนื้อหา hero/section สำหรับหน้าเว็บ

Proyecta มาพร้อม collection designs สำเร็จรูป — fields ที่เหมาะสม คำใบ้สำหรับ admin และเนื้อหาเริ่มต้น — สำหรับประเภท records ที่ธุรกิจจริงใช้งาน: บล็อกโพสต์และบทความ, บริการ, แคตาล็อกสินค้า, เมนูอาหาร, testimonials และรีวิว, สมาชิกทีม, แกลเลอรีรูปภาพ, FAQs, อีเวนต์, ที่ตั้ง, ทรัพยากรที่ดาวน์โหลดได้, ตำแหน่งงาน, คอร์สเรียน, ทัวร์ และรายการที่พัก เป็นต้น

คุณไม่ต้องเลือกจากเมนูใดๆ เมื่อคุณอธิบายแอปของคุณ Proyecta จะเลือกสิ่งที่ brief ของคุณต้องการ — ประเภทธุรกิจ, ฟีเจอร์ที่คุณขอ, ภาษาของคุณ — และสร้างขึ้นมา พร้อมเติมเนื้อหาตัวอย่างที่สมจริง หากแอปของคุณต้องการสิ่งที่ไม่มีใน collections สำเร็จรูป Proyecta จะออกแบบ custom collection ที่มี fields ของตัวเองแทน

เพราะเหตุนี้ admin panel ของแอปคุณจะแสดง collections ของแอปคุณ — ไม่ใช่รายการที่ตายตัว มันสร้างตัวเองจาก content model ที่ใช้งานจริงของแอปคุณ ดังนั้นสิ่งที่ Proyecta สร้างให้คุณ ไม่ว่าจะเป็น built-in หรือ custom ก็คือสิ่งที่คุณเห็นและแก้ไขได้ แอป Proyecta สองแอปแทบไม่มี collections ชุดเดียวกัน และนั่นคือสิ่งที่ตั้งใจไว้

ทุก collection ประกอบด้วย fields ที่มี type กำหนดไว้ ประเภทของ field ถูก enforce ตั้งแต่ต้นจนจบ — admin panel แสดง editor ที่เหมาะสม และหน้าเว็บของคุณได้รับค่าที่ typed ถูกต้อง

ประเภท field ใช้สำหรับ
string ค่าบรรทัดเดียวสั้นๆ — ชื่อเรื่อง, ชื่อ, ที่อยู่
text ย่อหน้าของข้อความธรรมดา
markdown rich text แบบยาว — เนื้อหาบทความ, เนื้อหา “เกี่ยวกับเรา”
slug URL identifier ที่ auto-derive จาก field อื่น (เช่น ชื่อเรื่อง)
number จำนวนนับ, คะแนน, ระยะเวลา
money ราคาหรือจำนวนเงิน — แสดงและแก้ไขในรูปแบบเงิน
boolean สวิตช์เปิด/ปิด
date วันที่ตามปฏิทิน
datetime Timestamps — วันที่เผยแพร่, เวลาเริ่มต้นอีเวนต์
weeklyHours เวลาทำการของแต่ละวันในสัปดาห์
asset รูปภาพ, วิดีโอ หรือ PDF (จัดเก็บเป็น public URL)
reference ลิงก์ไปยัง entry ใน collection อื่น
enum ค่าจากรายการตัวเลือกที่กำหนดไว้ล่วงหน้า
array รายการของ strings — แท็ก, หมายเลขโทรศัพท์, โซน
blocks content blocks ที่ซ้อนกันได้ — หน้าเว็บที่สร้างจาก sections ที่ typed
json ข้อมูลที่มีโครงสร้างซึ่งไม่เหมาะกับประเภทใดข้างต้น

Entry คือรายการหนึ่งใน collection ทุก entry มี สถานะ:

  • Draft — งานที่อยู่ระหว่างดำเนินการ ไม่แสดงบนเว็บไซต์ live ของคุณ
  • Published — เผยแพร่แล้วและมองเห็นได้สำหรับผู้เยี่ยมชม
  • Archived — เลิกใช้งานแล้ว เก็บไว้โดยไม่รบกวน

หน้าเว็บสาธารณะของคุณจะเห็นเฉพาะ entries ที่ Published เท่านั้น — drafts และรายการ archived จะถูกซ่อนโดยอัตโนมัติ ทำให้คุณเตรียมเนื้อหาได้อย่างปลอดภัยก่อนที่จะเผยแพร่

มีสองวิธีในการเพิ่มและแก้ไขเนื้อหา — ไม่จำเป็นต้องแตะโค้ดทั้งสองวิธี:

  1. ถาม AI ใน chat แค่อธิบายการเปลี่ยนแปลงและมันจะแก้ไขเนื้อหาที่ถูกต้องให้คุณ:
    • "Add a testimonial from María González: 'Best service in town', 5 stars."
    • "Change the tagline in Business Info to 'Café de especialidad en la Roma'."
    • "Mark the last five contact-form submissions as read."
  2. Admin panel ของแอปคุณ ทุกแอปที่เผยแพร่แล้วจะมี admin panel ที่ป้องกันด้วยการ sign in ในตัว ที่คุณ (และพนักงานที่คุณให้สิทธิ์) จัดการเนื้อหาและ form submissions โดยตรง — editor แบบ spreadsheet ต่อ collection พร้อม submissions inbox มันปรับแต่งตัวเองจาก content model ที่ใช้งานจริงของแอปคุณ ดังนั้น collections ใหม่จะปรากฏที่นั่นโดยอัตโนมัติ ดูที่ Admin Panel

จัดการเนื้อหา CMS ของคุณผ่าน admin panel ของแอปหรือ AI — content editor ใน builder อยู่ใน roadmap (ดู กำลังจะมาเร็วๆ นี้) เครื่องมือ realtime record browser สำหรับแอปที่อัปเดตแบบ live กำลัง coming soon

หน้าเว็บของคุณอ่านเนื้อหาผ่าน typed hooks ชุดหนึ่งใน @/hooks/useContent — และ AI เป็นคนเขียนการเชื่อมต่อนั้นให้คุณ คุณอธิบายหน้าเว็บ Proyecta สร้าง components ที่เรียก hooks เหล่านี้กับ collections จริงของคุณ คุณแทบไม่ต้องแตะมันเลย แต่นี่คือสิ่งที่มันทำ:

Hook สิ่งที่มันทำ
useCollection('posts') แสดงรายการ entries ที่ published ของ collection (พร้อม filter/sort/limit ที่เลือกได้)
useEntry('posts', slug) ดึง entry ที่ published หนึ่งรายการตาม slug (หน้า detail)
useSingleton('businessInfo') อ่าน singleton (ข้อมูลธุรกิจ, เนื้อหาหน้าเว็บ)
useFormSubmit('contactForm') ส่งฟอร์มและรายงาน validation errors
// A blog index — exactly the kind of code the AI generates for you
import { useCollection } from '@/hooks/useContent';
function BlogList() {
const { data: posts, isLoading } = useCollection('posts', { sort: 'published_at:desc' });
if (isLoading) return <Spinner />;
return posts?.map((post) => <PostCard key={post._id} post={post} />);
}

เมื่อ Proyecta สร้าง typed interfaces สำหรับ collections ของคุณ hooks จะกลายเป็น fully typed (useCollection<Post>('posts')) ทำให้ editor ของคุณ autocomplete ทุก field ข้อมูลถูก hydrate ตั้งแต่ paint ครั้งแรก จาก snapshot ที่ bake ไว้ — หน้าเว็บ render ทันทีและ SEO-friendly จากนั้น refresh แบบ live ใน background

ฟอร์มเป็น capability หลัก ไม่ใช่สิ่งที่ AI สร้างแบบ hand-built วาง form block ลงไปและมันจะ render fields, validate input, submit และแสดง success state:

<FormBlock form="contactForm" />

ฟอร์มมาพร้อมสำเร็จรูปเช่นกัน — ฟอร์มติดต่อ, ฟอร์มขอใบเสนอราคา, ฟอร์มจอง, ฟอร์มสั่งซื้อ, ฟอร์มลงทะเบียน — และ Proyecta เชื่อมต่อฟอร์มที่ถูกต้องเข้ากับหน้าเว็บของคุณ Submissions จะส่งไปยัง inbox ใน admin panel ของแอปคุณ และเจ้าของจะได้รับอีเมลเมื่อมีรายการใหม่เข้ามา ดูที่ Forms สำหรับรายละเอียดทั้งหมด

เนื้อหาสามารถแปลเป็น locales หลายภาษาได้ Fields ที่ถูกทำเครื่องหมายว่า localized จะเก็บค่าต่อภาษา และ read hooks จะ resolve ผ่าน fallback chain (ภาษาที่ขอ → fallbacks ที่กำหนดค่า → ค่าเริ่มต้น) เมื่อคุณส่ง locale ที่ active ของผู้เยี่ยมชม:

const { data: posts } = useCollection('posts', { locale: 'es' });

แอปที่ใช้ภาษาเดียวจะไม่สนใจ locales เลย — ไม่มีอะไรต้องตั้งค่า สำหรับเรื่องราวการแปลภาษาที่กว้างขึ้น ดูที่ Internationalization

Release รวม entries หลายรายการเข้าด้วยกันเพื่อให้เผยแพร่ (หรือยกเลิกการเผยแพร่) พร้อมกัน — เตรียม content drop แบบประสานงาน (การ launch, หน้าสินค้าใหม่, การรีเฟรช FAQ) และเปิดใช้งานทั้งหมดพร้อมกันในครั้งเดียว

หมายเหตุ: การเผยแพร่อัตโนมัติตามเวลายังไม่ได้นำมาใช้งาน Release ที่มีวันที่ scheduled_at จะเข้าสู่สถานะ scheduled แต่ต้องเผยแพร่ด้วยตนเอง การเผยแพร่อัตโนมัติตามเวลาที่กำหนดกำลังจะมาในเร็วๆ นี้

คุณแทบไม่ต้องเขียนสิ่งนี้เองเลย — อธิบายสิ่งที่คุณต้องการและ Proyecta จะสร้างให้กับ collections จริง:

  • "Build a blog. Each post has a title, cover image, rich-text body, category, and tags. Public routes at /blog and /blog/[slug], newest first."
  • "Add an FAQ section the owner can edit, grouped by category."
  • "Add a bookable services list with a request-a-quote form."
  • "Make the site bilingual — English and Spanish — with a language switcher."
  • "Seed the testimonials with five realistic reviews for a coffee shop."

CMS คือบ้านหลักสำหรับเนื้อหาและ records ที่ถาวร ข้อมูลบางประเภทอยู่ในระบบที่ออกแบบมาเฉพาะแทน:

ประเภทข้อมูล ที่อยู่
เนื้อหาและ records (posts, services, listings, FAQs, catalog, bookings) Proyecta CMS (หน้านี้) — ค่าเริ่มต้น
Realtime / behavior state (live chat, feeds, presence, game state) Realtime storecoming soon
บัญชีผู้ใช้และการ sign-in Auth
สินค้า, คำสั่งซื้อ, subscriptions, การชำระเงิน Commerce
ไฟล์ที่อัปโหลดและ media Files & Media
Static assets ที่ bake เข้า build ไดเรกทอรี public/ ในโปรเจกต์ของคุณ

CMS คือค่าเริ่มต้น Realtime store สำหรับ behavior ที่ realtime จริงๆ กำลัง coming soon แม้กระนั้น เนื้อหาถาวรและ commerce catalog ก็จะยังคงอยู่ใน CMS

  • Content editor ใน builder — เรียกดูและแก้ไข CMS collections ของคุณโดยตรงจาก builder dashboard (ปัจจุบัน: จัดการเนื้อหาผ่าน admin panel หรือ AI)
  • Rich-text WYSIWYG editor — การแก้ไขแบบ visual สำหรับ markdown fields (ปัจจุบันแก้ไขเป็น markdown)
  • Timed auto-publish — releases ที่เผยแพร่โดยอัตโนมัติตามเวลาที่กำหนด
  • Live preview ของการเปลี่ยนแปลงเนื้อหากับแอปของคุณ
  • Content roles — แยก editor permissions ออกจาก developer permissions