Системные события
Компонент бросает свои системные события на ключевых этапах — нарезке, грабинге контента, рендере, работе с лексиконами и экспорте. Через них можно вмешаться в процесс, не трогая код пакета: написать обычный плагин MODX и подписать его на нужное событие.
Все события регистрируются при установке пакета (группа MigxPageConfigurator), поэтому в списке событий менеджера они доступны сразу.
Как подписаться
Создайте плагин, отметьте нужное событие на вкладке «Системные события». Внутри плагина:
- параметры события доступны как обычные переменные (имена — из таблиц ниже);
- чтобы вернуть изменённое значение в компонент, запишите его в
$modx->event->returnedValues['<ключ>'].
// Плагин на mpcOnGetSectionHtml — обернуть конкретную секцию
if (($section['section_name'] ?? '') === 'features') {
$modx->event->returnedValues['html'] = '<div class="features-wrap">' . $html . '</div>';
}Подсказка
Возврат через returnedValues работает только для событий, где компонент его читает (в таблицах — колонка «Можно вернуть»). Если она пустая, событие чисто уведомительное.
Рендер страницы
| Событие | Когда срабатывает | Параметры | Можно вернуть |
|---|---|---|---|
mpcOnBeforeRender | Перед рендером страницы, после сбора всех данных ресурса | resourceData, Render | resourceData |
mpcOnBeforeParseConfig | Перед разбором конфига в секции | sections, Render | sections |
mpcOnGetSectionHtml | На каждую секцию — после её рендера в HTML, до сборки страницы | section, html, Render | html |
mpcOnBeforeRender даёт поправить весь resourceData; mpcOnBeforeParseConfig — вмешаться в набор секций; mpcOnGetSectionHtml — изменить HTML конкретной секции по её имени (section.section_name).
Нарезка и грабинг контента
| Событие | Когда срабатывает | Параметры | Можно вернуть |
|---|---|---|---|
mpcOnGetSectionFieldsValues | После сбора значений полей секции при грабинге | sectionKey, fieldsValues, section, Grabber | fieldsValues |
mpcOnGetNewHtml | При простановке плейсхолдера на месте поля (нарезка) | fieldHTMLNew, Grabber (PlaceholderProcessor) | fieldHTMLNew |
mpcOnHandleContact | При обработке блока контактов | contact, Grabber | contact |
Сохранение полей
| Событие | Когда срабатывает | Параметры | Можно вернуть |
|---|---|---|---|
mpcOnFieldSave | После успешной записи значения поля через write-API (правки из визуального редактора/админки), перед инвалидацией кэша | resourceId, address | — |
address — адрес записанного поля (содержит, в частности, уровень level: resource/type/global). Удобно для реакции на правку контента — например, сбросить свой кэш или уведомить внешнюю систему.
Стандартные события MODX
Помимо своих событий, компонент подписывает плагин на штатные события MODX OnBeforeDocFormSave и OnDocFormSave — чтобы фиксировать в журнале правки контента из формы ресурса в админке. Подробнее — в разделе Аудит правок.
Лексиконы
| Событие | Когда срабатывает | Параметры | Можно вернуть |
|---|---|---|---|
mpcOnGetResourceIdentifier | При определении идентификатора ресурса (имени файла лексикона) | rid, Grabber | rid |
mpcOnGetLexiconKey | При формировании ключа лексикона для поля | sectionLexiconPrefix, lexiconKey, fieldName, Grabber | lexiconKey |
mpcOnImportLexiconValue | При импорте значения перевода | value | value |
Медиа
| Событие | Когда срабатывает | Параметры | Можно вернуть |
|---|---|---|---|
mpcOnBeforeDownloadFile | Перед загрузкой файла медиа (картинка/видео/аудио/прочее) | fileName, extension, type, downloadPath, Grabber | fileName |
Тип медиа (images/videos/audios/others) определяется по тегу элемента (см. Работа с медиа), а не по расширению.
Язык на запросе
| Событие | Когда срабатывает | Параметры | Можно вернуть |
|---|---|---|---|
mpcOnBeforeSetLanguageSettings | Перед тем как пакет выставит язык на запросе (событие MODX OnHandleRequest) | available, default, cookieName, Mpc | available, default, cookieName, skip |
По умолчанию пакет сам определяет язык на каждый запрос: берёт список доступных языков, язык по умолчанию и имя cookie из настроек и выставляет cultureKey. Это событие позволяет вмешаться в этот момент, не выключая механизм целиком (полный выключатель — настройка mpc_set_language_on_request).
Что можно вернуть через returnedValues:
available— другой набор доступных языков (массив или строка через запятую);default— другой язык по умолчанию;cookieName— другое имя cookie с языком;skip— любое непустое значение полностью отменяет установку языка пакетом (язык поставит ваш код).
// Плагин на mpcOnBeforeSetLanguageSettings — отдать установку языка своему коду
$modx->event->returnedValues['skip'] = true;// Или просто подменить набор языков и язык по умолчанию
$modx->event->returnedValues['available'] = 'ru,en,de';
$modx->event->returnedValues['default'] = 'en';Экспорт лексиконов (XLSX)
| Событие | Когда срабатывает | Параметры | Можно вернуть |
|---|---|---|---|
mpcOnBeforeSaveExcel | Дважды: до открытия файла и после открытия, перед первой строкой | filePath, ExcelFileHandler; во втором вызове дополнительно sheet | filePath (только в пределах assets/) |
mpcOnAddCellToExcel | Перед добавлением строки в XLSX | values, keys, filePath, ExcelFileHandler | — |
Событие mpcOnBeforeSaveExcel срабатывает дважды:
- До открытия файла — параметры
filePathиExcelFileHandler. На этом этапе можно подменить путь к файлу, вернувfilePath(значение принимается только в пределах каталогаassets/). - После открытия файла, перед записью первой строки — те же параметры плюс
sheet(объект текущего листа OpenSpout). Здесь путь уже зафиксирован; параметрsheetпозволяет настроить лист до записи данных, например заморозить шапку или колонки черезSheetView. Настраивать лист нужно именно здесь: OpenSpout пишет<sheetViews>лениво при добавлении первой строки, и более поздние изменения уже не применятся.
