Гайд

Konso CMS 2.0: управление контентом на основе схем

Создавайте собственные типы контента с динамическими полями, настраивайте валидацию и публикуйте материалы через headless Delivery API — без ограничений фиксированной структуры.

Попробовать arrow_forward
bolt

TL;DR

  • check_circleCMS 2.0 — schema-driven headless CMS: вы сами определяете структуру данных под конкретный проект
  • check_circle12 типов полей: от shorttext и richText до media, reference и json object
  • check_circleВалидация на уровне схемы: required, minLength/maxLength, regex, unique, allowedValues
  • check_circlePublishing workflow с тремя статусами: draft → published → archived
  • check_circleПрефиксные ID (cnt_, ctp_, med_) — читаемы в логах и API-ответах
  • check_circleShared DAL: одни и те же хранимые процедуры для App API и Delivery API

Что такое Konso CMS 2.0?

Konso CMS 2.0 — это полностью schema-driven система управления контентом, встроенная в платформу Konso. В отличие от фиксированных CMS, где структура данных задана заранее, в CMS 2.0 вы сами описываете, что такое "контент" для вашего проекта: какие поля нужны, какие типы данных, какие правила валидации. Это headless-подход: контент хранится в базе данных, управляется через API, а рендеринг остаётся на стороне вашего фронтенда. Konso предоставляет Delivery API для получения опубликованных записей.

Типы контента и динамические поля

Основная единица CMS 2.0 — тип контента (content type). Это схема, которая описывает набор полей и правила их заполнения. Например, тип "Статья" может содержать заголовок, текст, дату публикации, изображение-обложку и теги.

Поддерживаемые типы полей

  • check_circleshorttext — однострочный текст
  • check_circlelongText — многострочный текст
  • check_circlerichText — форматированный текст с разметкой
  • check_circlenumber — числовое значение
  • check_circleboolean — флаг (да/нет)
  • check_circledate — дата
  • check_circledatetime — дата и время
  • check_circleslug — URL-совместимый идентификатор (с автогенерацией из другого поля)
  • check_circleselect — выбор из заданного списка значений
  • check_circlemedia — ссылка на медиа-актив
  • check_circlereference — связь с другими записями (например, пост → категории)
  • check_circlejson object — произвольный JSON

Валидация на уровне схемы

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

Доступные правила валидации

ПравилоПрименимо кОписание
requiredВсе типыПоле обязательно для заполнения
minLength / maxLengthТекстовые поляОграничение длины строки
min / maxnumberДиапазон допустимых значений
regexТекстовые поляПроверка по регулярному выражению
uniqueТекстовые поля, slugУникальность значения в рамках проекта
allowedValuesselectСписок допустимых вариантов

Publishing workflow

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

Draft (черновик)

Запись создаётся в статусе draft. Редактирование доступно в любое время. Delivery API не возвращает черновики.

Published (опубликовано)

После публикации фиксируются published_at и published_by. Запись становится доступна через Delivery API. Можно откатить обратно в draft командой unpublish.

Archived (архив)

Финальный статус. Архивированные записи исключены из всех выборок по умолчанию. Восстановление не предусмотрено — только создание новой записи.

Медиа-активы

Медиа хранится отдельно от записей контента в таблице cms_media_assets. Каждый актив имеет свой prefixed ID с префиксом med_. В полях типа media хранится только ID актива, а не сам файл — это позволяет переиспользовать одно изображение в нескольких записях без дублирования. Загрузка файлов происходит через multipart upload. Поддерживаются поля: название, MIME-тип, размер, storage_key и публичный URL.

Prefixed ID: читаемые идентификаторы

Все сущности CMS 2.0 используют префиксные ID вместо обычных UUID. Формат: _<8 случайных символов>.

Префиксы сущностей

СущностьПрефиксПример
Тип контентаctp_ctp_j39xk2p8
Запись контентаcnt_cnt_m7p4q2nk
Медиа-активmed_med_k3m9x2pq
lightbulb

Почему это удобно

Глядя на ID в логах или API-ответе, вы сразу понимаете, с каким типом объекта работаете — без поиска по базе. Алфавит генерации исключает похожие символы (0, O, l, I), чтобы ID легко читался в URL и CLI-выводе.

Delivery API

Delivery API — это отдельный публичный эндпоинт для получения опубликованного контента. Он возвращает только записи со статусом published, что позволяет безопасно использовать его на фронтенде без риска утечки черновиков. Основные возможности: - Получение списка записей с фильтрацией по типу контента, статусу и JSONB-полям - Получение записи по ID или slug - Пагинация и сортировка Shared DAL (Data Access Layer) гарантирует, что App API и Delivery API работают с одними и теми же хранимыми процедурами PostgreSQL — логика фильтрации не дублируется.

Архитектурные решения: JSONB и PostgreSQL

Поля записей хранятся в колонке fields типа JSONB. Это даёт гибкость: разные типы контента имеют разные наборы полей, но все записи находятся в одной таблице cms_content_entries. GIN-индекс на JSONB обеспечивает быструю фильтрацию по значениям полей без полного скана таблицы. Схема типа контента версионируется (schema_version). При каждом обновлении схемы версия инкрементируется, и каждая запись хранит версию схемы, по которой она была создана — это основа для будущей миграции данных.

Что включено в MVP

  • check_circleУправление типами контента с динамическими полями
  • check_circleСоздание и редактирование записей контента
  • check_circleФильтрация по статусу, типу контента и JSONB-полям
  • check_circlePublishing workflow (draft / published / archived)
  • check_circleМедиа-активы с загрузкой файлов
  • check_circleDelivery API для получения опубликованного контента
  • check_circleВалидация схемы и записей на сервере
  • check_circleShared DAL с хранимыми процедурами PostgreSQL

Начните работу с Konso CMS 2.0

Создайте первый тип контента и опубликуйте записи через Delivery API уже сегодня

Открыть Konso arrow_forward

Частые вопросы

Чем CMS 2.0 отличается от предыдущей версии? expand_more
CMS 1.0 использовала фиксированную структуру контента. CMS 2.0 — полностью schema-driven: вы сами определяете типы контента и их поля. Это убирает ограничения на структуру данных и позволяет адаптировать CMS под любой проект.
Какие типы полей поддерживаются? expand_more
В MVP поддерживаются 12 типов: shorttext, longText, richText, number, boolean, date, datetime, slug, select, media, reference и json object. Каждый тип поддерживает собственный набор правил валидации.
Как работает Delivery API? expand_more
Delivery API — это публичный эндпоинт, который возвращает только опубликованные записи. Поддерживает фильтрацию по типу контента, статусу и значениям JSONB-полей, а также поиск по slug. Черновики и архивированные записи через Delivery API недоступны.
Можно ли использовать медиа-активы в нескольких записях? expand_more
Да. Медиа хранится отдельно от записей контента. В поле типа media указывается только ID актива (med_...). Один и тот же файл можно использовать в любом количестве записей без дублирования.
Что происходит со записями при удалении типа контента? expand_more
Тип контента не удаляется физически — он переходит в статус архива (is_active = false). Существующие записи сохраняются и остаются доступными. Создание новых записей для архивного типа недоступно.

Оставаясь на сайте, Вы даете свое согласие на использование файлов cookie