Использование: сайт и контент
Общая схема
Контент создаётся и редактируется в админ-панели. Публичный сайт (фронт) запрашивает данные через REST API и отображает страницы, блог, медиа. Подробное описание админки — в разделе «Админ-панель», примеры кода для фронта — в разделе «Фронт и API».
Что размещать в админке
- Страницы (Page) — например «О нас», «Контакты». У каждой обычно есть поле
slug(URL-путь). На сайте они отображаются по адресу/slug. - Записи блога (Blog) — список постов, каждый с slug. Сайт показывает список на
/blogи отдельную страницу поста на/blog/[slug]. - Блоки (Block) — переиспользуемые блоки контента (заголовок, текст, цитата, CTA, галерея и т.д.). Страница может ссылаться на блоки по ID и выводить их в нужном порядке.
- Меню — в разделе Navigation задаются пункты меню (Главная, Блог, ссылки). Фронт запрашивает
GET /navigation?locale=ruи рисует шапку/футер. - Настройки и SEO — название сайта, описание, мультиязычность, при необходимости ID главной страницы для локали.
Как сайт получает контент
На фронте в коде страницы (или в общем модуле lib/cms.ts) вызывается fetch(API_URL + '/content?...') или аналоги. Переменная NEXT_PUBLIC_API_URL / NEXT_PUBLIC_CMS_API_URL задаёт базовый URL API. Ответ содержит массив documents с полем data — это и есть поля из админки (title, slug, content, image и т.д.).
Типичные сценарии
- Главная — либо статичный лендинг, либо контент страницы по ID из настроек (
homepageId). - Динамическая страница по slug — запрос
/content?schemaName=page&status=published&locale=ru, поиск в массиве документа сdata.slug === slug, рендер полей и блоков. - Блог — список:
schemaName=blog; страница поста — тот же список и поиск поdata.slugили запрос/content/:id, если известен id. - Блоки на странице — в данных страницы хранится массив ID блоков; отдельным запросом
/content?schemaName=block&status=publishedзагружаются все блоки, затем по ID выбираются нужные и рендерятся по типу (heading, text, quote, cta, gallery и т.д.).
Мультиязычность
В запросах контента и навигации передаётся параметр locale (ru, en и т.д.). В админке для каждого документа можно заполнять поля для каждой локали. На сайте маршруты могут быть вида /en/blog для английской версии; тогда в API передаётся locale=en.
Дальше
Подробное пошаговое описание интерфейса админки — в разделе «Админ-панель». Готовые примеры кода для запросов к API, структура ответов и переменные окружения — в разделе «Фронт и API».