9.9 KiB
Пакеты контента
Модуль content_packages переносит структуру и содержимое между установками
AVE.cms в проверяемом JSON-формате ave-content-package-v1. Он заменяет старые
rubimex и faster: не запускает PHP-файлы импорта, не читает serialize() и
не выполняет произвольный SQL.
Что входит в пакет
Структура каждой выбранной рубрики переносится всегда:
- сама рубрика и её настройки URL;
- группы и определения полей, JSON-настройки, условия формы и шаблоны вывода полей;
- основной шаблон документа рубрики и код до/после сохранения;
- связи с другой рубрикой, если обе рубрики входят в пакет.
Дополнительные части включаются отдельными переключателями:
| Опция | Состав |
|---|---|
| Шаблоны | Шаблон страницы, варианты шаблона рубрики. |
| Запросы | Параметры вывода, шаблоны, вложенные группы и условия. |
| Документы | Реквизиты документов и значения всех полей. |
| Права рубрик | Права для групп, найденных на целевом сайте по названию или ID. |
Системные блоки выбираются отдельно и не требуют выбора рубрики.
Пакет хранит значения медиа-полей и пути к файлам, но не включает сами файлы из
uploads/. При переносе на другой сервер каталог загрузок нужно синхронизировать
отдельно, сохранив относительные пути.
Экспорт
- Откройте Модули → Пакеты контента → Экспорт.
- Укажите понятное название пакета.
- Включите только нужные дополнительные части. Документы и права по умолчанию отключены, чтобы случайно не выгрузить пользовательские данные.
- Отметьте рубрики и независимые блоки.
- Нажмите Скачать JSON.
Один файл может содержать связанные рубрики. Это предпочтительнее нескольких отдельных файлов: ссылки полей и связанные рубрики тогда переназначаются в одной операции.
Предварительная проверка и импорт
- Перейдите на вкладку Импорт и выберите
.jsonразмером до 25 МБ. - Нажмите Проверить пакет. На этом шаге БД не меняется.
- Проверьте количество рубрик, полей, запросов, условий, документов и блоков.
- Если указаны отсутствующие типы полей, сначала установите предоставляющий их модуль. Кнопка импорта останется заблокированной.
- Подтвердите импорт.
Проверенный файл привязан к текущей сессии администратора на 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 через
этот модуль.