Плагины - фрагменты кода, которые привязаны к системными событиям и выполняются, когда это событие наступает.
При выполнении практически любых действий система генерирует события. Допустим, при публикации ресурса происходит событие OnDocPublished, при авторизации происходит OnManagerLogin и т.д.
Зачастую дополнения сами могут генерировать события. Скажем, дополнение Shopkeeper создаёт больше десятка разных событий, к каждому из которых вы можете привязать свой код и добавить или изменить функционал практически любого события, которое произойдёт на сайте.
Важно: плагины работают как для событий внутри панели администрирования, так и для событий на фронте сайта. Полный список событий вы можете посмотреть при создании плагина на вкладке "СИСТЕМНЫЕ СОБЫТИЯ".
Этот плагин сработает перед тем, как содержимое ресурса будет показано посетителю (OnWebPagePrerender) и заменит слова из массива на заглушку.
$words = array("плохое слово", "ещё одно"); // слова для фильтации
$e = &$modx->Event;
if($e->name == 'OnWebPagePrerender') {//проверяем, то ли это событие, которое нам нужно
$out = &$modx->documentOutput; // получаем ссылку на содержимое ресурса
$out = str_replace($words,"<b>цензура</b>",$out); // заменяем слова из массива на "заглушку".
}
Предыдущий пример работал на пользовательской части сайта. А этот плагин сработает на событие формирования левого меню в панели администрирования. Он заменит иконку у ресурса с id=3 и создаст для него своё контекстное меню.
$e = &$modx->Event;
if($e->name = 'OnManagerNodePrerender'){
if($ph['id'] == '3'){
$ph['icon'] = "<i class='fa fa-copy'></i>";
$ph['icon_folder_open'] = "<i class='fa fa-copy'></i>";
$ph['icon_folder_close'] = "<i class='fa fa-copy'></i>";
$ph['contextmenu'] = array(
'header1' => array(
'innerText' => "Это каталог"
),
'item3' => array(
'innerHTML' => '<i class="fa fa-file-o fa-fw fa-lg"></i> Добавить товар',
'title' => 'Дочерний ресурс',
'id' => 'item3',
'onclick' => "modx.tree.menuHandler(3);"
),
'item2' => array(
'innerHTML' => '<i class="fa fa-pencil-square-o fa-fw fa-lg"></i> Редактировать',
'title' => ' Редактировать',
'id' => 'item2',
'onclick' => "modx.tree.menuHandler(2);"
),
'item12' => array(
'innerHTML' => '<i class="fa fa-eye fa-fw fa-lg"></i> Просмотр',
'title' => 'Просмотр',
'id' => 'item12',
'onclick' => "modx.tree.menuHandler(12);",
)
);
}
}
$e->output(serialize($ph));
Зачастую дополнения отдают плагинам переменные для изменения. Как правило, эти переменные описаны в документации к дополнению.