การจัดการเนื้อหา
CMS ของ Proyecta คือ data layer หลัก ของแอปคุณ — ไม่ใช่แค่บล็อกโพสต์และเนื้อหาการตลาด แต่คือข้อมูลจริงที่แอปของคุณสร้างขึ้นมาบนนั้น Collections ถูกสร้างและเติมด้วยเนื้อหาตัวอย่างจริง ก่อนที่ UI จะมีอยู่ ทำให้แอปของคุณเชื่อมต่อกับข้อมูลที่แก้ไขได้ตั้งแต่ build แรก
แอป Proyecta ส่วนใหญ่จัดเก็บข้อมูลไว้ใน CMS ที่ติดตั้งมาพร้อมกัน เมื่อคุณอธิบายแอปของคุณ Proyecta จะออกแบบ data model สร้าง collections ที่จำเป็น และเติมด้วยเนื้อหาตัวอย่างที่สมจริง — ทั้งหมดนี้ก่อนที่จะสร้างหน้าเดียว จากนั้นหน้าเว็บของคุณจะอ่านเนื้อหาจริงที่เจ้าของแก้ไขได้ผ่าน typed hooks ที่ AI เชื่อมต่อให้คุณ สำหรับภาพรวมของวิธีที่ทุกอย่างทำงานร่วมกัน ดูที่ วิธีที่ข้อมูลของแอปคุณทำงาน
คุณไม่จำเป็นต้องคิดถึงเรื่องนี้เลยเพื่อเริ่มต้น — มันเกิดขึ้นโดยอัตโนมัติ หน้านี้อธิบายสิ่งที่อยู่เบื้องหลังเพื่อให้คุณปรับแต่งได้
Collections และ singletons
หัวข้อที่มีชื่อว่า “Collections และ singletons”เนื้อหาถูกจัดระเบียบเป็น 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 |
ข้อมูลที่มีโครงสร้างซึ่งไม่เหมาะกับประเภทใดข้างต้น |
Entries, drafts และการเผยแพร่
หัวข้อที่มีชื่อว่า “Entries, drafts และการเผยแพร่”Entry คือรายการหนึ่งใน collection ทุก entry มี สถานะ:
- Draft — งานที่อยู่ระหว่างดำเนินการ ไม่แสดงบนเว็บไซต์ live ของคุณ
- Published — เผยแพร่แล้วและมองเห็นได้สำหรับผู้เยี่ยมชม
- Archived — เลิกใช้งานแล้ว เก็บไว้โดยไม่รบกวน
หน้าเว็บสาธารณะของคุณจะเห็นเฉพาะ entries ที่ Published เท่านั้น — drafts และรายการ archived จะถูกซ่อนโดยอัตโนมัติ ทำให้คุณเตรียมเนื้อหาได้อย่างปลอดภัยก่อนที่จะเผยแพร่
การจัดการเนื้อหา (ไม่ต้องเขียนโค้ด)
หัวข้อที่มีชื่อว่า “การจัดการเนื้อหา (ไม่ต้องเขียนโค้ด)”มีสองวิธีในการเพิ่มและแก้ไขเนื้อหา — ไม่จำเป็นต้องแตะโค้ดทั้งสองวิธี:
- ถาม 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."
- 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 youimport { 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
Releases
หัวข้อที่มีชื่อว่า “Releases”Release รวม entries หลายรายการเข้าด้วยกันเพื่อให้เผยแพร่ (หรือยกเลิกการเผยแพร่) พร้อมกัน — เตรียม content drop แบบประสานงาน (การ launch, หน้าสินค้าใหม่, การรีเฟรช FAQ) และเปิดใช้งานทั้งหมดพร้อมกันในครั้งเดียว
หมายเหตุ: การเผยแพร่อัตโนมัติตามเวลายังไม่ได้นำมาใช้งาน Release ที่มีวันที่
scheduled_atจะเข้าสู่สถานะscheduledแต่ต้องเผยแพร่ด้วยตนเอง การเผยแพร่อัตโนมัติตามเวลาที่กำหนดกำลังจะมาในเร็วๆ นี้
รูปแบบที่พบบ่อย (ให้ AI เชื่อมต่อให้)
หัวข้อที่มีชื่อว่า “รูปแบบที่พบบ่อย (ให้ AI เชื่อมต่อให้)”คุณแทบไม่ต้องเขียนสิ่งนี้เองเลย — อธิบายสิ่งที่คุณต้องการและ 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 store — coming soon |
| บัญชีผู้ใช้และการ sign-in | Auth |
| สินค้า, คำสั่งซื้อ, subscriptions, การชำระเงิน | Commerce |
| ไฟล์ที่อัปโหลดและ media | Files & Media |
| Static assets ที่ bake เข้า build | ไดเรกทอรี public/ ในโปรเจกต์ของคุณ |
CMS คือค่าเริ่มต้น Realtime store สำหรับ behavior ที่ realtime จริงๆ กำลัง coming soon แม้กระนั้น เนื้อหาถาวรและ commerce catalog ก็จะยังคงอยู่ใน CMS
กำลังจะมาเร็วๆ นี้ {#coming-soon}
หัวข้อที่มีชื่อว่า “กำลังจะมาเร็วๆ นี้ {#coming-soon}”- Content editor ใน builder — เรียกดูและแก้ไข CMS collections ของคุณโดยตรงจาก builder dashboard (ปัจจุบัน: จัดการเนื้อหาผ่าน admin panel หรือ AI)
- Rich-text WYSIWYG editor — การแก้ไขแบบ visual สำหรับ
markdownfields (ปัจจุบันแก้ไขเป็น markdown) - Timed auto-publish — releases ที่เผยแพร่โดยอัตโนมัติตามเวลาที่กำหนด
- Live preview ของการเปลี่ยนแปลงเนื้อหากับแอปของคุณ
- Content roles — แยก editor permissions ออกจาก developer permissions