Кастомные события для модуля "События"

В версии 2.8.6 появился модуль "События", который предоставляет информацию о событиях на сайте. По умолчанию модуль отображает список заранее предопределённых событий (например: добавление нового комментария, новый заказ и т.д.). Чтобы добавить отображение кастомных событий, необходимо проделать три действия:

  1. Назначить кастомный обработчик на интересующие системное действие (см. "Назначение обработчика события");
  2. Написать код обработчика (см. "Пишем обработчик события");
  3. Задать текст лэйблов для типа события.

Рассмотрим пример кастомизации модуля на примере добавления события удаления страницы из структуры, чтобы можно было просмотреть, кто, когда и какую страницу удалял.

Назначение кастомного обработчика

Создайте файл "custom_events.php" в директории модуля "events" ("/classes/modules/events") и пропишите туда следующий код - перехватчик события:


<?php
   new UmiEventListener("systemDeleteElement", "events", "onPageDelete");
?>

В данном коде мы назначили обработчик события "systemDeleteElement" - это метод "onPageDelete". "systemDeleteElement" - это стандартная точка вызова, событие вызывается при удалении страницы в админке и EiP. Полный список стандартных точек вызова Вы можете посмотреть здесь.

Написание кода обработчика

Теперь необходимо реализовать метод "onPageDelete". Для этого в директории модуля откройте файл "__custom.php" и пропишите код обработчика сразу же после строки "//TODO: Write here your own macroses":


public function onPageDelete(iUmiEventPoint $event) {
    if($event->getMode() == 'before') {
        if(!$event->getRef('element') instanceof umiHierarchyElement) return;

        $pageId = $event->getRef('element')->getId();
        $hierarchy = umiHierarchy::getInstance();
        $page = $hierarchy->getElement($pageId);

        $this->registerEvent('systemDeleteElement', array($page->getName()), null, null);
    }
}

Основной обработчика является вызов метода registerEvent, который принимает 4 параметра:

  1. $eventTypeId - строковый идентификатор события (может быть любым);
  2. $params - массив параметров, которые нужны для формирования текстового сообщения события. Информация о пользователе добавляется в этот массив автоматически во время исполнения методов;
  3. $elementId - id страницы, при просмотре которой событие отметится, как прочитанное (необязательный параметр);
  4. $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/content.png'

...

Константы задаются в следующем формате:

  • [идентификатор_типа_события] - название типа события;
  • [идентификатор_типа_события]_new - заголовок для блоков в модуле на вкладке "Новые события";
  • [идентификатор_типа_события]_msg - шаблон сообщения о произошедшем событии. Для его разбора используются параметры из массива $params. Первый параметр - это всегда автоматически добавленная ссылка на редактирование пользователя, совершившего действие. Второй параметр - логин пользователя.
  • [идентификатор_типа_события]_img - ссылка на картинку для блоков в модуле на вкладке "Новые события.

 

Теперь, если какой-нибудь пользователь удалит страницу через административную панель или с помощью функции Edit-In-Place, то в модуле "Событий" Вы сможете увидить примерно следующую картину:

dashboard.dashboard_systemDeleteElement_event