# Рубрики и поля ← [К разделу «Как собирается сайт»](README.md) Рубрика описывает тип контента. Она объединяет поля, форму редактора документа, публичные шаблоны, URL, права и код жизненного цикла. Рубрика не является папкой и сама не формирует дерево сайта. ## С чего начать Перед созданием рубрики ответьте на четыре вопроса: 1. Какие данные одинаковы для всех документов этого типа? 2. Какие поля нужны только редактору, а какие участвуют в публичном выводе, поиске, запросах и фильтрах? 3. Как должен формироваться URL? 4. Как выглядит один документ и его краткое представление в списке? Пример для статьи: `lead`, `cover`, `content`, `author`, `published_source`. Общие свойства не нужно дублировать несколькими полями ради разных каталогов: для этого используются единый alias характеристики и настройки конкретного каталога. ## Конструктор формы Левая колонка содержит доступные, но ещё не размещённые поля. Центральная область показывает форму документа, правая — настройки выбранного поля. - поле, добавленное в форму, исчезает из списка доступных; - порядок меняется перетаскиванием; - поле можно вернуть в библиотеку, не удаляя саму сущность; - сетка состоит из 12 колонок, ширина определяет место поля в строке; - группы визуально разделяют большие формы и не меняют публичные данные; - переименование в конструкторе меняет подпись в этой рубрике, но не системный alias типа поля; - просмотр настроек без изменений не должен помечать форму как изменённую. После сохранения надпись о несохранённых изменениях должна исчезнуть. Если поле не помещается или редактор растягивает строку, проверьте ширину и настройки типа. ## Настройки поля в рубрике Настройки делятся на общие и принадлежащие типу. Одно значение не должно редактироваться в двух местах. Например, для списка значений используется один редактор вариантов, а для «Документ из рубрики» — один выбор рубрики-источника. Часто используемые параметры: | Параметр | Назначение | | --- | --- | | Название | Подпись поля в редакторе документа. | | Ширина | Количество колонок формы из 12. | | Значение по умолчанию | Начальное значение нового документа. | | Обязательное | Запрещает сохранение без корректного значения. | | Префикс/суффикс | Единица измерения или пояснение рядом с редактором. | | Публичный шаблон | Разметка значения при выводе документа или запроса. | | Путь загрузки | Каталог медиа с маркерами документа и поля. | Подробный контракт типов: [Поля документов](../fields/README.md). ## Шаблоны рубрики Основной шаблон собирает `[tag:maincontent]` текущего документа. Дополнительные шаблоны позволяют выбрать другой вид для отдельного документа без изменения его полей. ```html

[tag:fld:title]

[tag:fld:content]
``` Отдельно настраиваются: - основной и дополнительные шаблоны документа; - Open Graph; - вставка в `` через `[tag:rubheader]`; - вставка перед закрытием страницы через `[tag:rubfooter]`; - шаблон краткого представления там, где он поддерживается; - код до и после сохранения. Не переносите общую оболочку ``, `` и `` в рубрику: ею владеет шаблон сайта. ## Шаблон URL Шаблон рубрики является префиксом адреса документа. Поддерживаются маркеры даты: | Маркер | Значение | | --- | --- | | `%d`, `%m` | День и месяц с ведущим нулём. | | `%Y`, `%y` | Год из четырёх или двух цифр. | | `%H`, `%M`, `%S` | Час, минута и секунда. | Пример: `news/%Y/%m`. В редакторе документа к результату добавляется короткий alias. Полный путь, введённый вручную с `/`, система не переписывает шаблоном. ## Права Права рубрики определяют, какие группы могут читать, создавать, редактировать и удалять её документы. Они дополняют права раздела «Документы»: доступ к экрану ещё не означает право менять любую рубрику. После создания рубрики проверьте минимум гостевую, пользовательскую, модераторскую и административную группы. ## Код до и после сохранения Сохранённый PHP пока поддерживается для проектной логики. Код получает контекст, описанный в информационном блоке редактора, и выполняется через защищённый runtime. Перед сохранением можно нормализовать или отклонить данные, после сохранения — запустить интеграцию, не дублируя основной CRUD документа. Для переиспользуемой логики предпочтительнее hooks и сервис модуля. Так один обработчик можно подключить к нескольким рубрикам, протестировать и отключить без правки шаблонного кода. См. [Хуки документов](../hooks/documents.md). ## Безопасное изменение рабочей рубрики 1. Сделайте резервную копию БД. 2. Не удаляйте поле, пока его значения используются документами, запросами, каталогами или шаблонами. 3. Сначала добавьте новое поле и перенесите данные. 4. Проверьте несколько реальных документов и публичных листингов. 5. Только после этого удаляйте старый alias и очищайте кеш. ## Ревизии схемы Ревизия схемы — это точка восстановления состава полей и их расположения. Она создаётся автоматически при изменении поля, группы, порядка или конструктора. Откройте список рубрик и нажмите кнопку с иконкой истории в нужной строке. Перед восстановлением панель показывает три разных результата: - **вернётся** — объект был в старом снимке, но сейчас отсутствует; - **изменится** — объект существует, но его настройки отличаются; - **сохранится новым** — объект появился позже выбранного снимка. Последний вариант особенно важен: AVE.cms не удаляет более новые поля. Они остаются в рубрике вместе со значениями документов, но возвращаются в библиотеку конструктора как неразмещённые. Их можно снова поставить в форму вручную. Значения документов не входят в ревизию схемы и не перезаписываются. Перед подтверждением система считает документы с данными затрагиваемых полей. Если схема или документы изменились после открытия предпросмотра, восстановление будет остановлено: откройте снимок повторно и проверьте новый расчёт. Нельзя восстановить снимок, если он ссылается на неустановленный тип поля, содержит повторяющийся alias или конфликтует с полем другой рубрики. Исправьте причину блокировки, а не удаляйте действующее поле ради обхода проверки. Перед каждым восстановлением текущая схема автоматически сохраняется отдельным снимком. Поэтому сразу после операции можно выбрать запись «Перед восстановлением» и безопасно вернуться назад.