Управление контентом
Headless CMS с коллекциями, записями, локалями и релизами. Управляй контентом через панель Content или SDK.
Proyecta имеет полноценную headless CMS. Она построена по принципу «schema first»: ты определяешь коллекции (структурированные типы контента), а затем создаёшь записи, соответствующие полям каждой коллекции. Записи можно локализовать и объединять в релизы.
Панель Content
Заголовок раздела «Панель 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).
Основные понятия
Заголовок раздела «Основные понятия»| Понятие | Описание |
|---|---|
| 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 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 });Коллекции
Заголовок раздела «Коллекции»// 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);Записи — это фактические строки контента. Каждая запись принадлежит коллекции и содержит данные, соответствующие полям этой коллекции.
// 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);Медиафайлы
Заголовок раздела «Медиафайлы»Загрузка медиафайлов является полноценным инструментом — используй их для прикрепления изображений, видео или 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) см. раздел Файлы и медиа.
Локализация
Заголовок раздела «Локализация»Контент можно переводить на несколько локалей. Каждая локаль — это запись, управляемая через proyecta.content.locales:
await proyecta.content.locales.create({ /* code, name, etc. */});
for await (const locale of proyecta.content.locales.list()) { console.log(locale);}При получении записей можно запросить перевод для конкретной локали. Полную картину интернационализации см. в разделе Интернационализация.
Релиз — это набор записей, которые выходят (или снимаются с публикации) одновременно. Это позволяет подготовить скоординированный выход контента — маркетинговый запуск, новую страницу продукта, обновление 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 всё настроить)
Заголовок раздела «Типовые сценарии (попроси 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
Заголовок раздела «Когда использовать Content, а когда Database»| Сценарий использования | Используй |
|---|---|
| Редакционный контент (статьи, FAQ, маркетинговые тексты) — нужны статусы публикации/черновика, расписание, локализация | Content API |
| Данные приложения (пользователи, заказы, позиции) — нужна скорость запросов, транзакции, реальное время | Database |
| Статичные ресурсы в коде | Директория public/ в твоём проекте |
| Файлы, загружаемые пользователями | Файлы и медиа |
Скоро появится
Заголовок раздела «Скоро появится»- Редактор rich-text записей — полноценное WYSIWYG-редактирование полей
rich_textв панели Content - Live preview изменений контента в контексте твоего приложения
- Content roles — разграничение прав редакторов и разработчиков