Перейти к содержимому

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

CMS Proyecta — это основной слой данных вашего приложения: не просто записи блога и маркетинговые тексты, а реальные записи, на которых строится ваше приложение. Коллекции создаются и заполняются реальным примерным контентом до того, как существует интерфейс, — поэтому ваше приложение с первой же сборки подключено к редактируемым данным.

Большинство приложений Proyecta хранят данные во встроенной CMS. Когда вы описываете своё приложение, Proyecta проектирует модель данных, создаёт нужные коллекции и заполняет их реалистичным примерным контентом — и всё это до того, как будет построена хотя бы одна страница. Затем ваши страницы читают этот реальный, редактируемый владельцем контент через типизированные хуки, которые AI подключает за вас. Чтобы понять общую картину того, как всё это устроено, см. Как работают данные вашего приложения.

Чтобы начать работу, вам не нужно ни о чём думать — всё происходит автоматически. На этой странице объясняется, что скрывается за кулисами, чтобы вы могли настроить это под себя.

Контент организован в коллекции и синглтоны:

Тип Что это Примеры
Коллекция Тип контента со множеством записей — одна схема, много строк. posts, services, testimonials, catalogItems
Синглтон Тип контента ровно с одной записью — глобальный, одиночный контент. businessInfo, seoSettings

Коллекция — это форма; каждая запись — один элемент этой формы (одна статья блога, одна услуга, один вопрос FAQ). Синглтон хранит одну редактируемую запись — идентификацию вашего бизнеса или текст hero-секции страницы.

Proyecta поставляется с готовыми дизайнами коллекций — продуманные поля, подсказки для панели администратора и стартовый контент — для видов записей, которые реально нужны бизнесу: статьи блога, услуги, каталог товаров, меню блюд, отзывы, члены команды, фотогалерея, FAQ, мероприятия, адреса, загружаемые ресурсы, вакансии, курсы, туры и предложения по размещению — и не только.

Вам не нужно ничего выбирать из списка. Когда вы описываете своё приложение, Proyecta сам выбирает подходящие варианты — исходя из типа вашего бизнеса, запрошенных функций и языка — и создаёт их, предварительно заполнив реалистичным примерным контентом. Если вашему приложению нужно что-то, чего нет среди готовых вариантов, Proyecta проектирует пользовательскую коллекцию с собственными полями.

Именно поэтому панель администратора показывает коллекции вашего приложения — а не фиксированный список. Она формируется из живой модели контента вашего приложения, поэтому всё, что Proyecta создал для вас — встроенное или пользовательское, — именно то, что вы видите и редактируете. Два приложения Proyecta редко имеют одинаковый набор коллекций, и это сделано намеренно.

Каждая коллекция состоит из типизированных полей. Типы полей применяются сквозь весь стек — панель администратора отображает нужный редактор, а ваши страницы получают значения правильного типа.

Тип поля Для чего
string Короткие однострочные значения — заголовки, имена, адреса.
text Абзац простого текста.
markdown Длинный форматированный текст — тело статьи, раздел «О нас».
slug URL-идентификатор, автоматически производный от другого поля (например, заголовка).
number Счётчики, рейтинги, длительности.
money Цена или денежная сумма — отображается и редактируется как деньги.
boolean Флаги вкл/выкл.
date Календарные даты.
datetime Временны́е метки — даты публикации, время начала мероприятий.
weeklyHours Часы работы для каждого дня недели.
asset Изображение, видео или PDF (хранится как публичный URL).
reference Ссылка на запись в другой коллекции.
enum Значение из фиксированного списка вариантов.
array Список строк — теги, номера телефонов, зоны.
blocks Составные блоки контента — страница, построенная из типизированных секций.
json Структурированные данные, которые не вписываются ни в один из перечисленных типов.

Запись — это один элемент коллекции. У каждой записи есть статус:

  • Draft — работа в процессе; никогда не отображается на живом сайте.
  • Published — опубликована и видна посетителям.
  • Archived — выведена из обращения, убрана с глаз долой.

Публичные страницы видят только опубликованные записи — черновики и архивированные элементы скрываются автоматически, так что вы можете безопасно готовить контент до его публикации.

Есть два способа добавлять и редактировать контент — ни один из них не требует написания кода:

  1. Попросите AI в чате. Просто опишите изменение, и он отредактирует нужный контент за вас:
    • "Добавь отзыв от Марии Гонсалес: 'Лучший сервис в городе', 5 звёзд."
    • "Измени слоган в Business Info на 'Café de especialidad en la Roma'."
    • "Отметь последние пять заявок из контактной формы как прочитанные."
  2. Панель администратора вашего приложения. Каждое опубликованное приложение получает встроенную, защищённую входом панель администратора, где вы (и сотрудники, которым вы открыли доступ) управляете контентом и заявками из форм напрямую — редактор в виде таблицы для каждой коллекции плюс папка входящих заявок. Она настраивается автоматически на основе живой модели контента вашего приложения, поэтому новые коллекции появляются там сразу. См. Admin Panel.

Управляйте контентом CMS через панель администратора вашего приложения или AI — редактор контента прямо в конструкторе в разработке (см. Скоро). Браузер записей в реальном времени для приложений с live-обновлениями появится в ближайшее время.

Ваши страницы читают контент через набор типизированных хуков в @/hooks/useContent — и AI сам пишет это подключение за вас. Вы описываете страницу; Proyecta генерирует компоненты, которые вызывают эти хуки против ваших реальных коллекций. Вам редко приходится прикасаться к ним самостоятельно, но вот что они делают:

Хук Что делает
useCollection('posts') Возвращает опубликованные записи коллекции (с опциональной фильтрацией/сортировкой/лимитом).
useEntry('posts', slug) Получает одну опубликованную запись по slug (страницы деталей).
useSingleton('businessInfo') Читает синглтон (информация о бизнесе, контент страницы).
useFormSubmit('contactForm') Отправляет форму и сообщает об ошибках валидации.
// Индекс блога — именно такой код AI генерирует за вас
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} />);
}

Когда Proyecta генерирует типизированные интерфейсы для ваших коллекций, хуки становятся полностью типизированными (useCollection<Post>('posts')), и ваш редактор автодополняет каждое поле. Данные гидрируются при первой отрисовке из заранее подготовленного снимка — страницы рендерятся мгновенно и дружественно к SEO, затем в фоновом режиме обновляются в реальном времени.

Формы — это полноценная возможность, а не то, что AI собирает вручную. Добавьте блок формы, и он отрендерит поля, провалидирует ввод, отправит данные и покажет состояние успеха:

<FormBlock form="contactForm" />

Формы тоже поставляются в готовом виде — контактная форма, запрос расчёта, форма бронирования, форма заказа, форма регистрации — и Proyecta подключает нужную к вашим страницам. Заявки попадают в папку входящих панели администратора, а владельцу приходит письмо при поступлении новой. Полная картина — в разделе Формы.

Контент можно переводить на несколько локалей. Поля, помеченные как локализованные, хранят значение для каждого языка, и хуки чтения разрешают их через цепочку запасных вариантов (запрошенный язык → настроенные запасные варианты → язык по умолчанию), когда вы передаёте активную локаль посетителя:

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

Одноязычные приложения полностью игнорируют локали — настраивать ничего не нужно. Общая история о переводах — в разделе Интернационализация.

Релиз объединяет несколько записей, чтобы они стали активными (или были сняты с публикации) одновременно — подготовьте скоординированный выход контента (запуск, новая страница продукта, обновление FAQ) и переключите всё сразу.

Примечание: Автоматическая отложенная публикация пока не реализована. Релиз с датой scheduled_at переходит в статус scheduled, но должен быть опубликован вручную. Автопубликация в запланированное время появится в ближайшее время.

Распространённые сценарии (пусть AI всё подключит)

Заголовок раздела «Распространённые сценарии (пусть AI всё подключит)»

Вам редко нужно писать это вручную — опишите, что хотите, и Proyecta построит это на основе реальных коллекций:

  • "Создай блог. У каждого поста есть заголовок, обложка, текст в rich-text, категория и теги. Публичные маршруты /blog и /blog/[slug], сначала новые."
  • "Добавь раздел FAQ, который владелец может редактировать, сгруппированный по категориям."
  • "Добавь список услуг с возможностью бронирования и форму запроса расчёта."
  • "Сделай сайт двуязычным — английский и испанский — с переключателем языка."
  • "Заполни отзывы пятью реалистичными рецензиями для кофейни."

CMS — место по умолчанию для долговременного контента и записей. Некоторые виды данных живут в специализированных системах:

Вид данных Где хранится
Контент и записи (статьи, услуги, объявления, FAQ, каталог, бронирования) Proyecta CMS (эта страница) — по умолчанию
Состояние в реальном времени (live-чат, ленты, присутствие, игровое состояние) Realtime storeскоро
Аккаунты и вход пользователей Auth
Товары, заказы, подписки, платежи Commerce
Загруженные файлы и медиа Files & Media
Статические ресурсы, встроенные в сборку директория public/ вашего проекта

CMS — это вариант по умолчанию. Realtime store для действительно realtime-поведения появится в ближайшее время; даже тогда долговременный контент и каталог commerce останутся в CMS.

  • Редактор контента прямо в конструкторе — просматривайте и редактируйте коллекции CMS непосредственно из панели конструктора (сейчас: управляйте контентом через панель администратора или AI).
  • Визуальный WYSIWYG-редактор — визуальное редактирование для полей markdown (сейчас они редактируются как markdown).
  • Отложенная автопубликация — релизы, которые становятся активными автоматически в запланированное время.
  • Live-предпросмотр изменений контента в вашем приложении.
  • Роли контента — разграничение прав редактора и разработчика.