Аудит правок и трекаемые поля
Компонент ведёт журнал изменений контента: кто, когда и что поправил — и из визуального редактора, и из админки MODX, в одной таблице. Журнал нужен, чтобы видеть историю правок страницы и при необходимости откатывать их. Работает он на основе манифеста трекаемых полей — списка полей, которые компонент собирает из разметки при нарезке.
Когда это работает
Журнал и откат правок завязаны на визуальный редактор (mpcVisualEditor): запись изменений и интерфейс истории — его часть. Аудит правок из админки и сбор манифеста — на стороне самого MigxPageConfigurator (работают и без редактора, но просмотр истории удобнее через него).
Манифест трекаемых полей
При каждой нарезке компонент проходит по разметке шаблона и собирает список всех редактируемых полей в таблицу {prefix}mpc_tracked_fields. Это «опись» того, что вообще можно править на странице.
Что попадает в манифест:
- поля секций (
data-mpc-field) — обычные поля и поля-списки (помечаются как список); - поля ресурса (
data-mpc-rfield) — заголовок, текст, контент и т.п.; - TV-поля (
data-mpc-tv).
Манифест — общий по всем шаблонам, но каждая строка помечена своим шаблоном. На нарезке строки текущего шаблона переписываются заново (старые поля этого шаблона удаляются, актуальные добавляются), так что опись всегда соответствует свежей разметке. Перенарезали шаблон с новыми полями — манифест обновился.
Зачем он нужен:
- Фильтр для журнала. Когда ресурс сохраняется в админке, компонент по манифесту понимает, какие поля стоит трекать — особенно поля ресурса и TV, которых нет в конфиге секций.
- Подсказки в истории. В интерфейсе истории выпадающие списки «секция → поле» строятся из манифеста.
Уровень поля (правка для конкретной страницы, для типа страниц или глобально) в манифесте не хранится — он вычисляется в момент записи в журнал по тому, какой ресурс сохраняется.
Журнал изменений
Все правки пишутся в таблицу {prefix}mpcve_changelog. Одна запись = одно изменение и содержит:
- кто — пользователь;
- когда — дата и время;
- что — секция и поле;
- было → стало — старое и новое значение;
- источник — правка из редактора или из админки;
- уровень — страница / тип страниц / глобально;
- можно ли откатить.
Тип действия в записи:
| Действие | Что менялось |
|---|---|
field | значение поля секции |
row | строки поля-списка (добавление / удаление / перестановка) |
contact | поле контакта |
info | системная/контекстная настройка |
section | структурная операция над секциями |
Правки из визуального редактора
Когда контент-менеджер правит поле прямо на странице, редактор сам пишет запись в журнал (с сохранённым старым значением, чтобы правку можно было откатить). Подробнее — в документации mpcVisualEditor.
Правки из админки
Правки через форму ресурса и MIGX-конфигуратор тоже попадают в журнал — за это отвечает аудит админки:
- перед сохранением ресурса компонент снимает «снимок» старых значений (поля конфига секций + поля ресурса/TV из манифеста);
- при сохранении — сравнивает со свежими значениями и пишет в журнал то, что реально изменилось, с указанием уровня (страница / тип / глобально) и источника «админка».
Скалярные значения сохраняются целиком (их можно откатить); изменения списков и сложных записей фиксируются коротко — как пометка в истории, без отката.
Просмотр и откат
История доступна из визуального редактора: таблица записей по ресурсу с фильтрами (по секции и полю, по источнику «редактор / админка»), пословным сравнением «было → стало» и кнопкой отката у тех записей, что откатываются.
Что откатывается:
- значения полей (
field) — старое значение записывается обратно; - операции со строками списков (
row) — поле-список восстанавливается к состоянию до операции (например, удалённая строка возвращается).
Что фиксируется только как запись в истории (без отката): структурные операции над секциями, правки контактов и системных настроек — они помечаются как неоткатываемые. Откат сам по себе тоже попадает в журнал отдельной записью.
