Сайт ↗
Разделы документации
Начать · 0.8.1

База знаний: разделы, статьи и публикация

Пошаговый пример настройки модели, Markdown-редактора, связей, поиска и доступа к опубликованным статьям.

На этой странице

Соберём базу знаний с разделами и статьями. В готовой системе администрирования автор сможет выбрать раздел, написать текст и изменить статус публикации. Публичный сайт подключается отдельно: созданные операции работы с записями сами по себе не открывают черновики посетителям.

Сначала выполните init и запуск Generator UI. В примере используем английские технические имена; подписи, которые видят пользователи, можно написать по-русски.

1. Создайте модуль и раздел

В Content нажмите New module и создайте модуль content. В нём выберите New entity и укажите имя Section, вид persistent, модуль content и таблицу sections.

Добавьте поля кнопкой Add field:

Поле Выбор типа Настройки
id Identifier int64 Первичный ключ с генерацией значения; не вводится автором.
title String Название раздела, например «Руководства».
slug String Стабильное имя URL, Unique; например guides.
position Integer/Number Порядок раздела. Вводите его явно.

Пресет Identifier сразу настраивает первичный ключ и поддерживаемый способ генерации его значения. Это важно: обычное поле Number останется числом и не станет идентификатором автоматически.

Для title и slug откройте Basic settings → Values and validation и включите Required. У slug также проверьте Unique: адреса разделов не должны повторяться. Nullable отдельно разрешает NULL, то есть отсутствие значения в БД; это не то же самое, что обязательное заполнение строки. У relation/image обязательность выбирается одной согласованной настройкой. После Finish проверьте свойства в таблице полей.

2. Создайте статью

Создайте persistent-сущность Article, её таблица — articles. Добавьте id через тот же Identifier-пресет. Затем создайте остальные поля:

Поле Тип Для чего нужно
title String Заголовок статьи.
slug String Уникальный адрес, который не меняется вместе с правкой заголовка.
summary Text Короткое описание для списка.
body Text Полный Markdown статьи.
status Enum Значения draft,published,archived в таком порядке.
position Integer/Number Порядок внутри раздела.

У поля body выберите Presentation → Markdown. В форме статьи появятся визуальный редактор и режим исходного текста. Тип Text отвечает за хранение длинной строки, Presentation — за её редактирование. Для обычной статьи этого достаточно; свой редактор нужен при особых требованиях. Не добавляйте в форму автора обязательные хеши и ревизии источников, если приложение не заполняет их автоматически.

3. Свяжите статью с разделом

В Article нажмите Create relation → Many-to-one. Укажите цель Section, имя поля sectionId, обязательную ссылку и отображаемое поле Section.title. Тогда автор будет выбирать раздел по названию.

После Finish появятся поле внешнего ключа и связь, которой оно принадлежит. Если нужно видеть статьи внутри раздела, включите обратное представление: оно использует эту же связь, без второго внешнего ключа. Подробнее — подробности отношений.

4. Проверьте доступ и генерацию

Откройте Entity settings → Access → Entity CRUD access и оставьте нужные admin-операции. Для публичного сайта включите только необходимые external List/Get. Затем в External READ access добавьте status equal published: это серверное правило исключит черновики. Само наличие Enum такого ограничения не создаёт. Пока сайта нет, external-доступ можно оставить выключенным. Получившиеся адреса API видны в Generated routes. Далее используйте подключение сайта через стандартный external API.

В Generate просмотрите план, конфликты и маршруты, затем примените изменения. Запустите приложение через make dev. При первом запуске создайте superadmin по приглашению в терминале.

5. Проверьте работу редактора

В готовой системе администрирования сначала создайте Section, затем Article. У статьи выберите раздел, заполните slug, title, текст, status и position. Сохраните запись и откройте её повторно, чтобы убедиться, что данные сохранились.

Создайте ещё одну статью и откройте список. Чтобы управлять его порядком, вернитесь в Generator UI: у position включите List behavior → Sortable, у title — Searchable и при необходимости Filterable. Выполните Generate и обновите приложение. Поиск, фильтры и сортировка будут работать на сервере. Для публикации меняйте status в системе администрирования; сайт получит только записи, прошедшие external-правило чтения.

Дополнительно: CLI

Если понадобятся скрипты, ту же модель можно собрать через CLI: сущности, поля, отношения. Для пошаговой настройки используйте интерфейс.

Справка по шагам примера

За полным описанием параметров переходите в справку: сущности, поля, связи, доступ, виртуальные сущности. Там можно найти отдельную настройку, не повторяя весь пример.