# Пакеты контента ← [Назад к разделу «Модули»](README.md) Модуль `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 текстовый маркер `