Bỏ qua để đến nội dung

Quản lý nội dung

CMS của Proyecta là lớp dữ liệu chính của ứng dụng — không chỉ là bài đăng blog và nội dung marketing, mà còn là những bản ghi thực sự mà ứng dụng của bạn được xây dựng trên đó. Các collection được khởi tạo và điền sẵn nội dung mẫu thực tế trước khi giao diện tồn tại, giúp ứng dụng của bạn được kết nối với dữ liệu có thể chỉnh sửa ngay từ lần build đầu tiên.

Hầu hết các ứng dụng Proyecta lưu trữ dữ liệu trong CMS tích hợp sẵn. Khi bạn mô tả ứng dụng của mình, Proyecta sẽ thiết kế mô hình dữ liệu, tạo các collection cần thiết và điền vào đó nội dung mẫu thực tế — tất cả điều này xảy ra trước khi một trang nào được xây dựng. Các trang của bạn sau đó đọc nội dung thực, có thể chỉnh sửa bởi chủ sở hữu thông qua các hook có kiểu dữ liệu mà AI đã kết nối cho bạn. Để hiểu bức tranh tổng thể về cách mọi thứ kết hợp với nhau, hãy xem Cách dữ liệu ứng dụng của bạn hoạt động.

Bạn không cần phải nghĩ đến bất kỳ điều nào trong số này để bắt đầu — mọi thứ diễn ra tự động. Trang này giải thích những gì bên dưới để bạn có thể định hình nó.

Nội dung được tổ chức thành collectionsingleton:

Loại Là gì Ví dụ
Collection Một kiểu nội dung với nhiều entry — một schema, nhiều hàng. posts, services, testimonials, catalogItems
Singleton Một kiểu nội dung với đúng một entry — nội dung toàn cục, dùng một lần. businessInfo, seoSettings

Collection là một cấu trúc; mỗi entry là một mục của cấu trúc đó (một bài đăng blog, một dịch vụ, một câu hỏi FAQ). Singleton chứa một bản ghi duy nhất có thể chỉnh sửa — thông tin doanh nghiệp, hoặc nội dung hero/section cho một trang.

Proyecta cung cấp sẵn các thiết kế collection — với các trường hợp lý, gợi ý quản trị và nội dung khởi đầu — cho các loại bản ghi mà các doanh nghiệp thực sự cần: bài đăng blog và bài viết, dịch vụ, danh mục sản phẩm, thực đơn đồ ăn, nhận xét và đánh giá, thành viên nhóm, thư viện ảnh, FAQ, sự kiện, địa điểm, tài liệu tải xuống, vị trí tuyển dụng, khóa học, tour du lịch và danh sách chỗ ở, cùng nhiều loại khác.

Bạn không bao giờ phải chọn từ một danh sách có sẵn. Khi bạn mô tả ứng dụng của mình, Proyecta sẽ chọn những loại phù hợp với yêu cầu của bạn — loại hình doanh nghiệp, các tính năng bạn yêu cầu, ngôn ngữ của bạn — và tạo chúng, được điền sẵn nội dung mẫu thực tế. Nếu ứng dụng của bạn cần thứ gì đó không thuộc bất kỳ loại nào trong số đó, Proyecta sẽ thiết kế một collection tùy chỉnh với các trường riêng của nó.

Vì vậy, bảng quản trị của bạn hiển thị các collection của ứng dụng — không phải một danh sách cố định. Nó tự xây dựng từ mô hình nội dung trực tiếp của ứng dụng, vì vậy bất kể Proyecta đã tạo gì cho bạn — tích hợp sẵn hay tùy chỉnh — đó chính xác là những gì bạn thấy và chỉnh sửa. Hai ứng dụng Proyecta hiếm khi có cùng một tập hợp collection, và đó là điều có chủ ý.

Mỗi collection được tạo thành từ các trường có kiểu dữ liệu. Kiểu trường được áp dụng từ đầu đến cuối — bảng quản trị hiển thị đúng trình chỉnh sửa, và các trang của bạn nhận được giá trị đúng kiểu.

Kiểu trường Dùng để
string Giá trị ngắn một dòng — tiêu đề, tên, địa chỉ.
text Một đoạn văn bản thuần túy.
markdown Văn bản phong phú dài — nội dung bài viết, nội dung “giới thiệu”.
slug Định danh URL, tự động lấy từ một trường khác (ví dụ: tiêu đề).
number Số lượng, xếp hạng, thời lượng.
money Giá hoặc số tiền — được hiển thị và chỉnh sửa dưới dạng tiền tệ.
boolean Cờ bật/tắt.
date Ngày trong lịch.
datetime Dấu thời gian — ngày xuất bản, thời gian bắt đầu sự kiện.
weeklyHours Giờ mở cửa cho mỗi ngày trong tuần.
asset Một hình ảnh, video hoặc PDF (được lưu dưới dạng URL công khai).
reference Liên kết đến một entry trong collection khác.
enum Một giá trị từ danh sách lựa chọn cố định.
array Danh sách các chuỗi — thẻ tag, số điện thoại, khu vực.
blocks Các khối nội dung có thể xếp chồng — một trang được xây dựng từ các section có kiểu.
json Dữ liệu có cấu trúc không phù hợp với bất kỳ kiểu nào ở trên.

Một entry là một mục trong collection. Mỗi entry có một trạng thái:

  • Draft — đang trong quá trình thực hiện; không bao giờ hiển thị trên trang web trực tiếp của bạn.
  • Published — đang hoạt động và hiển thị với người truy cập.
  • Archived — đã ngừng sử dụng, được giữ lại nhưng không hiển thị.

Các trang công khai của bạn chỉ nhìn thấy các entry ở trạng thái Published — bản nháp và các mục đã lưu trữ bị ẩn tự động, vì vậy bạn có thể chuẩn bị nội dung an toàn trước khi nó được phát hành.

Có hai cách để thêm và chỉnh sửa nội dung — cả hai đều không cần chạm vào code:

  1. Hỏi AI trong chat. Chỉ cần mô tả thay đổi và nó sẽ chỉnh sửa nội dung phù hợp cho bạn:
    • "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. Bảng quản trị của ứng dụng. Mỗi ứng dụng đã publish đều có một bảng quản trị tích hợp sẵn, được bảo vệ bằng đăng nhập, nơi bạn (và nhân viên bạn cấp quyền truy cập) quản lý nội dung và các lượt gửi form trực tiếp — một trình chỉnh sửa kiểu bảng tính cho mỗi collection, cộng với hộp thư gửi. Nó tự cấu hình từ mô hình nội dung trực tiếp của ứng dụng, vì vậy các collection mới xuất hiện ở đó tự động. Xem Admin Panel.

Quản lý nội dung CMS của bạn thông qua bảng quản trị của ứng dụng hoặc AI — trình chỉnh sửa nội dung trong builder đang trong lộ trình phát triển (xem Sắp ra mắt). Trình duyệt bản ghi realtime cho các ứng dụng cập nhật trực tiếp sắp ra mắt.

Các trang của bạn đọc nội dung thông qua một tập hợp các hook có kiểu dữ liệu trong @/hooks/useContent — và AI viết phần kết nối đó cho bạn. Bạn mô tả trang; Proyecta tạo ra các component gọi các hook này đối với các collection thực của bạn. Bạn hiếm khi tự chạm vào chúng, nhưng đây là những gì chúng làm:

Hook Chức năng
useCollection('posts') Liệt kê các entry đã publish của một collection (với filter/sort/limit tùy chọn).
useEntry('posts', slug) Lấy một entry đã publish theo slug (các trang chi tiết).
useSingleton('businessInfo') Đọc một singleton (thông tin doanh nghiệp, nội dung trang).
useFormSubmit('contactForm') Gửi form và báo cáo lỗi validation.
// 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} />);
}

Khi Proyecta tạo các interface có kiểu dữ liệu cho các collection của bạn, các hook trở nên hoàn toàn có kiểu (useCollection<Post>('posts')), giúp trình soạn thảo của bạn tự động hoàn thành mọi trường. Các lần đọc được hydrate ngay lần render đầu tiên từ một snapshot được bake sẵn — các trang hiển thị ngay lập tức và thân thiện với SEO, sau đó tự động làm mới trong nền.

Form là một tính năng hàng đầu, không phải thứ AI tự xây dựng thủ công. Thêm một form block và nó sẽ hiển thị các trường, validate đầu vào, gửi và hiển thị trạng thái thành công:

<FormBlock form="contactForm" />

Các form cũng có sẵn — form liên hệ, form yêu cầu báo giá, form đặt lịch, form đặt hàng, form đăng ký — và Proyecta kết nối đúng form vào các trang của bạn. Các lượt gửi xuất hiện trong hộp thư của bảng quản trị ứng dụng, và chủ sở hữu sẽ được gửi email khi có lượt gửi mới. Xem Forms để có bức tranh đầy đủ.

Nội dung có thể được dịch sang nhiều locale. Các trường được đánh dấu là đã bản địa hóa lưu trữ một giá trị cho mỗi ngôn ngữ, và các hook đọc sẽ giải quyết chúng thông qua một chuỗi dự phòng (ngôn ngữ được yêu cầu → các dự phòng đã cấu hình → mặc định) khi bạn truyền locale đang hoạt động của người truy cập:

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

Các ứng dụng một ngôn ngữ bỏ qua locale hoàn toàn — không có gì cần cấu hình. Để biết câu chuyện dịch thuật rộng hơn, hãy xem Quốc tế hóa.

Một release gom nhiều entry lại để chúng được phát hành (hoặc hủy phát hành) cùng nhau — dàn dựng một đợt ra mắt nội dung phối hợp (một lần ra mắt, một trang sản phẩm mới, một lần làm mới FAQ) và chuyển tất cả cùng một lúc.

Lưu ý: Tính năng tự động xuất bản theo lịch chưa được triển khai. Một release có ngày scheduled_at sẽ chuyển sang trạng thái scheduled nhưng phải được xuất bản thủ công. Tính năng tự động xuất bản vào thời điểm đã lên lịch sẽ sớm ra mắt.

Các mẫu phổ biến (để AI kết nối cho bạn)

Phần tiêu đề “Các mẫu phổ biến (để AI kết nối cho bạn)”

Bạn hiếm khi tự viết điều này — hãy mô tả những gì bạn muốn và Proyecta sẽ xây dựng nó dựa trên các collection thực:

  • "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."

Dữ liệu ứng dụng của bạn lưu ở đâu

Phần tiêu đề “Dữ liệu ứng dụng của bạn lưu ở đâu”

CMS là nơi mặc định cho nội dung và bản ghi lâu dài. Một số loại dữ liệu nhất định lưu trong các hệ thống chuyên dụng thay thế:

Loại dữ liệu Lưu ở đâu
Nội dung & bản ghi (bài đăng, dịch vụ, danh sách, FAQ, danh mục, đặt lịch) Proyecta CMS (trang này) — mặc định
Trạng thái realtime / hành vi (live chat, feed, hiện diện, trạng thái game) Realtime storesắp ra mắt
Tài khoản người dùng & đăng nhập Auth
Sản phẩm, đơn hàng, đăng ký, thanh toán Commerce
File tải lên & media Files & Media
Tài nguyên tĩnh được bake vào bản build thư mục public/ trong dự án của bạn

CMS là mặc định. Một realtime store cho các hành vi thực sự realtime đang sắp ra mắt; ngay cả khi đó, nội dung lâu dài và danh mục commerce vẫn sẽ nằm trong CMS.

  • Trình chỉnh sửa nội dung trong builder — duyệt và chỉnh sửa các collection CMS trực tiếp từ dashboard của builder (hiện tại: quản lý nội dung qua bảng quản trị hoặc AI).
  • Trình soạn thảo WYSIWYG văn bản phong phú — chỉnh sửa trực quan cho các trường markdown (hiện tại chúng được chỉnh sửa dưới dạng markdown).
  • Tự động xuất bản theo lịch — các release tự động phát hành vào thời điểm đã lên lịch.
  • Xem trước trực tiếp các thay đổi nội dung đối với ứng dụng của bạn.
  • Content roles — phân tách quyền biên tập viên khỏi quyền developer.