Плагін - це фрагменти коду, які прив'язані до системних подій та виконуються, коли ця подія настає.
При виконані практично будь-яких дій система генерує події. Припустимо, при публикації ресурсу відбувається подія 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);",
)
);
}
}
$modx->event->output(serialize($ph));
Найчастіше доповнення віддають плагінам змінні для зміни. Як правило, ці змінні описані в документації до доповнення.