В версии 2.8.6 появился модуль "События", который предоставляет информацию о событиях на сайте. По умолчанию модуль отображает список заранее предопределённых событий (например: добавление нового комментария, новый заказ и т.д.). Чтобы добавить отображение кастомных событий, необходимо проделать три действия:
- Назначить кастомный обработчик на интересующие системное действие (см. "Назначение обработчика события");
- Написать код обработчика (см. "Пишем обработчик события");
- Задать текст лэйблов для типа события.
Рассмотрим пример кастомизации модуля на примере добавления события удаления страницы из структуры, чтобы можно было просмотреть, кто, когда и какую страницу удалял.
Назначение кастомного обработчика
Создайте файл "custom_events.php" в директории модуля "events" ("/classes/components/events") и пропишите туда следующий код - перехватчик события:
<?php
new umiEventListener("systemDeleteElement", "events", "onPageDelete");
?>
В данном коде мы назначили обработчик события "systemDeleteElement" - это метод "onPageDelete". "systemDeleteElement" - это стандартная точка вызова, событие вызывается при удалении страницы в админке и EiP. Полный список стандартных точек вызова Вы можете посмотреть здесь.
Написание кода обработчика
Теперь необходимо реализовать метод "onPageDelete". Для этого в директории модуля откройте файл "customMacros.php" и пропишите код обработчика сразу же после строки "public $module;":
public function onPageDelete(iUmiEventPoint $event) {
if($event->getMode() != 'before') {
return;
}
if(!$event->getRef('element') instanceof umiHierarchyElement) {
return;
}
$pageId = $event->getRef('element')->getId();
$hierarchy = umiHierarchy::getInstance();
$page = $hierarchy->getElement($pageId);
$this->module->registerEvent('systemDeleteElement', [$page->getName()], null, null);
}
Основной обработчика является вызов метода registerEvent, который принимает 4 параметра:
- $eventTypeId - строковый идентификатор события (может быть любым);
- $params - массив параметров, которые нужны для формирования текстового сообщения события. Информация о пользователе добавляется в этот массив автоматически во время исполнения методов;
- $elementId - id страницы, при просмотре которой событие отметится, как прочитанное (необязательный параметр);
- $objectId - id объекта, при просмотре которого событие отметится, как прочитанное (необязательный параметр).
Задание текста лэйблов
Осталось задать текст, который будет отображатся в миниблоке события. Для этого в директории модуля дублируйте файл "i18n.php" и переименуйте его в "i18n.ru.php". После чего, добавьте следующие константы:
...
'systemDeleteElement' => 'Удаление страницы',
'systemDeleteElement_msg' => 'Пользователь <a href="%s">%s</a> удалил страницу "%s"',
'systemDeleteElement_new' => 'Удалённые страницы',
'systemDeleteElement_img' => '/images/cms/admin/mac/icons/medium/trash.png'
...
Константы задаются в следующем формате:
- [идентификатор_типа_события] - название типа события;
- [идентификатор_типа_события]_new - заголовок для блоков в модуле на вкладке "Новые события";
- [идентификатор_типа_события]_msg - шаблон сообщения о произошедшем событии. Для его разбора используются параметры из массива $params. Первый параметр - это всегда автоматически добавленная ссылка на редактирование пользователя, совершившего действие. Второй параметр - логин пользователя.
- [идентификатор_типа_события]_img - ссылка на картинку для блоков в модуле на вкладке "Новые события.
Теперь, если какой-нибудь пользователь удалит страницу через административную панель или с помощью функции Edit-In-Place, то в модуле "Событий" Вы сможете увидить примерно следующую картину: