Перейти до вмісту

Управління контентом

Headless CMS з колекціями, записами, локалями та релізами. Керуй контентом через панель Content або SDK.

Proyecta має повноцінну headless CMS. Вона побудована за принципом schema-first: ти визначаєш колекції (структуровані типи контенту), а потім створюєш записи, що відповідають полям кожної колекції. Записи можна локалізувати та групувати у релізи.

Контентом можна керувати через SDK або запитавши AI. Content API має шість типів ресурсів:

Вкладка / РесурсПризначення
CollectionsВизначення та управління схемами контенту (напр., «Blog Post», «FAQ», «Product Spec»)
FieldsТипізовані слоти всередині колекції (керуються як підресурс Collections)
EntriesПерегляд, створення, редагування, публікація та видалення записів у колекції
LocalesДодавання та управління мовними/регіональними локалями для перекладеного контенту
ReleasesГрупування записів для одночасної публікації (або зняття з публікації); публікація вручну через releases.publish()
AssetsЗавантаження медіафайлів (зображень, відео, PDF) та управління ними; можна посилатися з записів

Натисни на колекцію у вкладці Collections, щоб перейти до її записів. Вкладка Entries дозволяє створювати, редагувати, публікувати та видаляти окремі одиниці контенту.

Усім можна також керувати програмно через SDK (proyecta.content).

КонцепціяЩо це таке
CollectionСхема — форма одного типу контенту (напр., «Blog Post», «FAQ», «Product Spec»)
FieldТипізований слот у колекції (напр., title: string, body: rich_text, coverImage: asset)
EntryОдин екземпляр колекції (один пост у блозі, один елемент FAQ)
AssetЗавантажений медіафайл, на який можна посилатися із записів
LocaleМова/регіон, на які перекладено контент
ReleaseГрупа записів, що публікуються (або знімаються з публікації) одночасно
import Proyecta from '@proyecta-ai/sdk';
const proyecta = new Proyecta({ apiKey: process.env.PROYECTA_API_KEY });
// 1. Define a collection
const blog = await proyecta.content.collections.create({
api_id: 'blogPost',
name: 'Blog Post',
// fields are added via collections.fields.create()
});
// 2. Create an entry
const post = await proyecta.content.entries.create({
collection_id: blog.id,
data: {
title: 'Hello, world',
body: 'My very first post.',
},
});
// 3. Publish it
await proyecta.content.entries.publish({ entryId: post.id });
// Browse collections
for await (const collection of proyecta.content.collections.list()) {
console.log(collection.name);
}
// Add or remove fields on a collection
await proyecta.content.collections.fields.create(blog.id, {
/* field definition */
});
await proyecta.content.collections.fields.delete(blog.id, fieldId);

Записи — це фактичні рядки контенту. Кожен запис належить до колекції та містить дані, що відповідають полям цієї колекції.

// 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 entry
await proyecta.content.entries.update(post.id, { data: { title: 'Updated title' } });
// Publish an entry
await proyecta.content.entries.publish({ entryId: post.id });
// Delete an entry
await proyecta.content.entries.delete(post.id);

Завантаження медіафайлів є повноцінною функцією — використовуй їх, щоб прикріплювати зображення, відео або PDF до своїх записів:

// Browse assets
for 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.

Контент можна перекласти кількома локалями. Кожна локаль — це запис, яким керують через 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.

Реліз — це набір записів, які публікуються (або знімаються з публікації) одночасно. Це дозволяє підготувати скоординований вихід контенту — маркетинговий запуск, нову сторінку продукту, оновлення 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 ready
await proyecta.content.releases.publish({ releaseId: release.id });
// Browse releases
for 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
  • Редактор записів із форматуванням — повноцінне WYSIWYG-редагування полів rich_text у панелі Content
  • Live preview змін контенту у твоєму застосунку
  • Ролі для контенту — розмежування прав редактора та розробника