Использование: сайт и контент

Общая схема

Контент создаётся и редактируется в админ-панели. Публичный сайт (фронт) запрашивает данные через 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».