Quản lý Nội dung
Một headless CMS với collections, entries, locales và releases. Quản lý nội dung từ panel Content hoặc SDK.
Proyecta có một headless CMS đầy đủ tính năng. Hệ thống hoạt động theo hướng schema-first: bạn định nghĩa các collections (kiểu nội dung có cấu trúc), sau đó tạo các entries tuân theo các trường của từng collection. Entries có thể được bản địa hóa và nhóm lại thành các releases.
Panel Content
Phần tiêu đề “Panel Content”Nội dung có thể được quản lý thông qua SDK hoặc bằng cách yêu cầu AI. Content API có sáu loại tài nguyên:
| Tab / Tài nguyên | Dùng để làm gì |
|---|---|
| Collections | Định nghĩa và quản lý các content schema (ví dụ: “Blog Post”, “FAQ”, “Product Spec”) |
| Fields | Các slot có kiểu dữ liệu trong một collection (quản lý như một sub-resource của Collections) |
| Entries | Duyệt, tạo, chỉnh sửa, publish và xóa entries trong một collection |
| Locales | Thêm và quản lý các locale ngôn ngữ/vùng cho nội dung được dịch |
| Releases | Nhóm các entries để phát hành (hoặc hủy phát hành) cùng nhau; publish thủ công qua releases.publish() |
| Assets | Upload và quản lý các file media (hình ảnh, video, PDF) có thể tham chiếu từ entries |
Nhấp vào một collection trong tab Collections để chuyển đến các entries của nó. Tab Entries cho phép bạn tạo, chỉnh sửa, publish và xóa từng mục nội dung.
Bạn cũng có thể quản lý mọi thứ theo hướng lập trình thông qua SDK (proyecta.content).
Các khái niệm
Phần tiêu đề “Các khái niệm”| Khái niệm | Là gì |
|---|---|
| Collection | Một schema — hình dạng của một kiểu nội dung (ví dụ: “Blog Post”, “FAQ”, “Product Spec”) |
| Field | Một slot có kiểu dữ liệu trong một collection (ví dụ: title: string, body: rich_text, coverImage: asset) |
| Entry | Một instance đơn lẻ của một collection (một bài blog, một mục FAQ) |
| Asset | Một file media đã upload có thể tham chiếu từ entries |
| Locale | Một ngôn ngữ/vùng mà nội dung được dịch sang |
| Release | Một nhóm các entries được lên lịch phát hành (hoặc hủy phát hành) cùng một lúc |
Quickstart
Phần tiêu đề “Quickstart”import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collectionconst blog = await proyecta.content.collections.create({ api_id: 'blogPost', name: 'Blog Post', // fields are added via collections.fields.create()});
// 2. Create an entryconst post = await proyecta.content.entries.create({ collection_id: blog.id, data: { title: 'Hello, world', body: 'My very first post.', },});
// 3. Publish itawait proyecta.content.entries.publish({ entryId: post.id });Collections
Phần tiêu đề “Collections”// Browse collectionsfor await (const collection of proyecta.content.collections.list()) { console.log(collection.name);}
// Add or remove fields on a collectionawait proyecta.content.collections.fields.create(blog.id, { /* field definition */});await proyecta.content.collections.fields.delete(blog.id, fieldId);Entries
Phần tiêu đề “Entries”Entries là các hàng nội dung thực tế. Mỗi entry thuộc về một collection và mang dữ liệu khớp với các trường của collection đó.
// Browse entries (pass the collection's api_id, not its numeric id)for await (const entry of proyecta.content.entries.list({ collection: 'blogPost' })) { console.log(entry);}
// Update an entryawait proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entryawait proyecta.content.entries.publish({ entryId: post.id });
// Delete an entryawait proyecta.content.entries.delete(post.id);Assets
Phần tiêu đề “Assets”Upload asset là tính năng hạng nhất — dùng chúng để đính kèm hình ảnh, video hoặc PDF vào entries của bạn:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteĐể upload file qua chat (kéo thả vào builder), xem Files & Media.
Bản địa hóa
Phần tiêu đề “Bản địa hóa”Nội dung có thể được dịch sang nhiều locale. Mỗi locale là một bản ghi được quản lý qua proyecta.content.locales:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}Khi bạn lấy các entries, bạn có thể yêu cầu bản dịch của một locale cụ thể. Xem Internationalization để có cái nhìn tổng quan hơn về i18n.
Releases
Phần tiêu đề “Releases”Một release là một gói các entries phát hành (hoặc hủy phát hành) cùng một lúc. Điều này cho phép bạn dàn dựng một đợt phát hành nội dung phối hợp — một chiến dịch marketing, một trang sản phẩm mới, một đợt làm mới FAQ — và mọi thứ sẽ được chuyển đổi đồng thời.
Lưu ý: Tính năng tự động publish theo lịch chưa được triển khai. Các release có ngày
scheduled_atsẽ chuyển sang trạng tháischedulednhưng phải được publish thủ công quareleases.publish(). Tính năng tự động publish vào thời điểm đã chỉ định sẽ sớm ra mắt.
// Create a release (optionally with a target date)const release = await proyecta.content.releases.create({ name: 'Monday launch', scheduled_at: '2024-01-08T09:00:00Z',});
// Manually publish a release when readyawait proyecta.content.releases.publish({ releaseId: release.id });
// Browse releasesfor await (const r of proyecta.content.releases.list()) { console.log(r);}Để thay đổi lịch của một release, hãy xóa và tạo lại — không có endpoint update.
Các pattern phổ biến (để AI xây dựng cho bạn)
Phần tiêu đề “Các pattern phổ biến (để AI xây dựng cho bạn)”"Build a blog using the Proyecta Content API. Collection 'Blog Post' with fields: title, slug, excerpt, body (rich text), coverImage (asset), author. Public route at /blog and /blog/[slug].""Create an FAQ collection in Proyecta Content. Build an admin page where I can add/edit FAQs and a public /faq page.""Set up a multi-language landing page using Proyecta Content with English and Spanish locales.""Create a release containing three blog posts and publish it manually when ready."
Khi nào dùng Content và khi nào dùng Database
Phần tiêu đề “Khi nào dùng Content và khi nào dùng Database”| Trường hợp sử dụng | Dùng cái này |
|---|---|
| Nội dung biên tập (bài viết, FAQ, nội dung marketing) — cần trạng thái publish/draft, lên lịch, bản địa hóa | Content API |
| Dữ liệu ứng dụng (người dùng, đơn hàng, mục hàng) — cần tốc độ truy vấn, transaction, real-time | Database |
| Static assets trong code | Thư mục public/ trong project của bạn |
| File do người dùng upload | Files & Media |
Sắp ra mắt
Phần tiêu đề “Sắp ra mắt”- Trình chỉnh sửa rich-text — chỉnh sửa WYSIWYG đầy đủ cho các trường
rich_texttrong panel Content - Live preview các thay đổi nội dung so với ứng dụng của bạn
- Content roles — phân tách quyền của editor khỏi quyền của developer