Files
ave-cms/help/modules/content-packages.md
2026-07-27 12:58:44 +03:00

9.9 KiB

Пакеты контента

Назад к разделу «Модули»

Модуль content_packages переносит структуру и содержимое между установками AVE.cms в проверяемом JSON-формате ave-content-package-v1. Он заменяет старые rubimex и faster: не запускает PHP-файлы импорта, не читает serialize() и не выполняет произвольный SQL.

Что входит в пакет

Структура каждой выбранной рубрики переносится всегда:

  • сама рубрика и её настройки URL;
  • группы и определения полей, JSON-настройки, условия формы и шаблоны вывода полей;
  • основной шаблон документа рубрики и код до/после сохранения;
  • связи с другой рубрикой, если обе рубрики входят в пакет.

Дополнительные части включаются отдельными переключателями:

Опция Состав
Шаблоны Шаблон страницы, варианты шаблона рубрики.
Запросы Параметры вывода, шаблоны, вложенные группы и условия.
Документы Реквизиты документов и значения всех полей.
Права рубрик Права для групп, найденных на целевом сайте по названию или ID.

Системные блоки выбираются отдельно и не требуют выбора рубрики.

Пакет хранит значения медиа-полей и пути к файлам, но не включает сами файлы из uploads/. При переносе на другой сервер каталог загрузок нужно синхронизировать отдельно, сохранив относительные пути.

Экспорт

  1. Откройте Модули → Пакеты контента → Экспорт.
  2. Укажите понятное название пакета.
  3. Включите только нужные дополнительные части. Документы и права по умолчанию отключены, чтобы случайно не выгрузить пользовательские данные.
  4. Отметьте рубрики и независимые блоки.
  5. Нажмите Скачать JSON.

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

Предварительная проверка и импорт

  1. Перейдите на вкладку Импорт и выберите .json размером до 25 МБ.
  2. Нажмите Проверить пакет. На этом шаге БД не меняется.
  3. Проверьте количество рубрик, полей, запросов, условий, документов и блоков.
  4. Если указаны отсутствующие типы полей, сначала установите предоставляющий их модуль. Кнопка импорта останется заблокированной.
  5. Подтвердите импорт.

Проверенный файл привязан к текущей сессии администратора на 30 минут. Перед записью система повторно сверяет SHA-256 файла, поэтому незаметно заменить JSON между предпросмотром и подтверждением нельзя.

Все сущности одного импорта создаются в транзакции. Ошибка поля, запроса или документа откатывает операцию целиком. Хуки content.document.saved, content.document.created и content.document.published запускаются только после успешного commit: при откате пакет не отправит письмо, webhook или публикацию для несуществующего документа.

Вместе с запросом переносятся контракт результата, renderer предпросмотра, стабильный последний критерий сортировки и декларативные источники условий. Подтверждение Native привязано к данным конкретного сайта, поэтому импортированный Native-запрос безопасно переводится в Shadow. После импорта запустите проверку Native уже на целевой базе и только затем включайте его повторно.

Новые ID и конфликты

Исходные числовые ID никогда не записываются напрямую. Система создаёт новые ID и переназначает:

  • поля в шаблонах [tag:fld:N], [tag:rfld:N] и выражениях field-N;
  • поля и вложенные группы условий запросов;
  • ссылки на поля в условиях формы отдельных полей и целых групп;
  • шаблоны рубрик у документов;
  • родителей документов;
  • связанные рубрики и настройки полей со ссылками на рубрики.

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

Существующие данные не перезаписываются. При конфликте alias создаётся новое значение с суффиксом -import-N, а совпадающее название получает пометку «импорт N». Поэтому один пакет можно безопасно загрузить повторно, но это создаст отдельную копию контента.

После переназначения ID пакет обновляет JSON-снимки затронутых документов. Публичный сайт не увидит старые токены модулей или значения полей из кеша.

Код рубрик и блоков

JSON может содержать PHP-код из настроек рубрики или блока. Во время импорта он только сохраняется как текст, однако после импорта штатный runtime сможет его выполнить. Импортируйте пакеты только из доверенного источника и просматривайте код рубрик и блоков перед включением на production.

Модуль «Безопасность файлов» допускает в этом конкретном JSON текстовый маркер <?php, но продолжает блокировать опасные конструкции высокого уровня: выполнение команды из HTTP-параметра, динамический include, цепочки декодирования и другие признаки внедрённого кода. Для остальных загрузок PHP внутри неисполняемого файла по-прежнему запрещён.

Формат ограничивает пакет 100 рубриками, 100 шаблонами страницы, 500 блоками, 5000 полями, 1000 запросами и 10000 документами. Для большого переноса лучше сделать несколько логически законченных пакетов.

При экспорте значения полей читаются пакетами по набору документов. Поэтому число SQL-запросов не растёт на один запрос для каждого документа; крупную рубрику всё равно следует делить по смыслу из-за размера итогового JSON и последующей загрузки файлов.

Удаление модуля

Деинсталляция удаляет временные файлы предпросмотра и настройки самого модуля. Импортированные рубрики, документы, запросы, шаблоны и блоки остаются: после успешной операции это обычный контент сайта. Удаляйте его через соответствующие разделы панели управления.

Старые PHP-файлы rubimex/faster напрямую не поддерживаются. Сначала перенесите данные в рабочую установку AVE.cms, затем сформируйте новый JSON через этот модуль.