Управління контентом
Headless CMS з колекціями, записами, локалями та релізами. Керуй контентом через панель Content або SDK.
Proyecta має повноцінну headless CMS. Вона побудована за принципом schema-first: ти визначаєш колекції (структуровані типи контенту), а потім створюєш записи, що відповідають полям кожної колекції. Записи можна локалізувати та групувати у релізи.
Панель Content
Section titled “Панель Content”Контентом можна керувати через SDK або запитавши AI. Content API має шість типів ресурсів:
| Вкладка / Ресурс | Призначення |
|---|---|
| Collections | Визначення та управління схемами контенту (напр., «Blog Post», «FAQ», «Product Spec») |
| Fields | Типізовані слоти всередині колекції (керуються як підресурс Collections) |
| Entries | Перегляд, створення, редагування, публікація та видалення записів у колекції |
| Locales | Додавання та управління мовними/регіональними локалями для перекладеного контенту |
| Releases | Групування записів для одночасної публікації (або зняття з публікації); публікація вручну через releases.publish() |
| Assets | Завантаження медіафайлів (зображень, відео, PDF) та управління ними; можна посилатися з записів |
Натисни на колекцію у вкладці Collections, щоб перейти до її записів. Вкладка Entries дозволяє створювати, редагувати, публікувати та видаляти окремі одиниці контенту.
Усім можна також керувати програмно через SDK (proyecta.content).
Концепції
Section titled “Концепції”| Концепція | Що це таке |
|---|---|
| Collection | Схема — форма одного типу контенту (напр., «Blog Post», «FAQ», «Product Spec») |
| Field | Типізований слот у колекції (напр., title: string, body: rich_text, coverImage: asset) |
| Entry | Один екземпляр колекції (один пост у блозі, один елемент FAQ) |
| Asset | Завантажений медіафайл, на який можна посилатися із записів |
| Locale | Мова/регіон, на які перекладено контент |
| Release | Група записів, що публікуються (або знімаються з публікації) одночасно |
Quickstart
Section titled “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 });Колекції
Section titled “Колекції”// 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);Записи
Section titled “Записи”Записи — це фактичні рядки контенту. Кожен запис належить до колекції та містить дані, що відповідають полям цієї колекції.
// 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
Section titled “Assets”Завантаження медіафайлів є повноцінною функцією — використовуй їх, щоб прикріплювати зображення, відео або PDF до своїх записів:
// Browse assetsfor await (const asset of proyecta.content.assets.list()) { console.log(asset);}
// Upload, update, or delete via assets.create / assets.update / assets.deleteДля завантаження файлів через чат (перетягування у builder) дивись Files & Media.
Локалізація
Section titled “Локалізація”Контент можна перекласти кількома локалями. Кожна локаль — це запис, яким керують через proyecta.content.locales:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}Під час отримання записів можна запросити переклад для конкретної локалі. Дивись Internationalization для загального розуміння i18n.
Релізи
Section titled “Релізи”Реліз — це набір записів, які публікуються (або знімаються з публікації) одночасно. Це дозволяє підготувати скоординований вихід контенту — маркетинговий запуск, нову сторінку продукту, оновлення FAQ — і застосувати всі зміни атомарно.
Примітка: Автоматична публікація за розкладом ще не реалізована. Релізи з датою
scheduled_atпереходять у статусscheduled, але мають бути опубліковані вручну черезreleases.publish(). Автопублікація у вказаний час з’явиться найближчим часом.
// 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);}Щоб змінити розклад релізу, видали його та створи заново — endpoint для оновлення не передбачений.
Поширені сценарії (нехай AI все налаштує)
Section titled “Поширені сценарії (нехай AI все налаштує)”"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."
Коли використовувати Content, а коли Database
Section titled “Коли використовувати Content, а коли Database”| Сценарій | Використовуй |
|---|---|
| Редакційний контент (пости, FAQ, маркетингові тексти) — потрібні статуси публікації/чернетки, розклад, локалізація | Content API |
| Дані застосунку (користувачі, замовлення, позиції) — потрібна швидкість запитів, транзакції, реальний час | Database |
| Статичні файли у коді | Директорія public/ у твоєму проєкті |
| Файли, завантажені користувачами | Files & Media |
Незабаром
Section titled “Незабаром”- Редактор записів із форматуванням — повноцінне WYSIWYG-редагування полів
rich_textу панелі Content - Live preview змін контенту у твоєму застосунку
- Ролі для контенту — розмежування прав редактора та розробника