Добавление события об изменении страницы или смены активности страницы

Материал из Umicms
Версия от 14:42, 7 мая 2018; Kublan (обсуждение | вклад) (Новая страница: «'''Актуально: версия 18 85081''' Если Вы хотите, чтобы в модуле События появлялось событие при и…»)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

Актуально: версия 18 85081

Если Вы хотите, чтобы в модуле События появлялось событие при изменении страниц и активности страниц, можно написать кастомный обработчик событий.

Для этого создадим файл custom_events.php в папке /classes/components/events/ и добавим в него следующий код:

<?php

    use UmiCms\Service;

    if (!Service::Registry()->get('//modules/events/collect-events')) {
       new umiEventListener('systemModifyElement', 'events', 'onPageModify');
       new umiEventListener('systemSwitchElementActivity', 'events', 'onPageChangeActivity');
    }

Теперь добавим код обработчика в файл /public_html/classes/components/events/customAdmin.php (после строки public $module;)

public function onPageModify(iUmiEventPoint $event) {
	if($event->getMode() != 'after') {
            return false;
        }

	if(!$event->getRef('element') instanceof umiHierarchyElement) {
            return;
        }

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

	$this->module->registerEvent('systemModifyElement', [$page->getName()], null, null);
}

public function onPageChangeActivity(iUmiEventPoint $event) {
	if($event->getMode() != 'after') {
            return false;
        }
	if(!$event->getRef('element') instanceof umiHierarchyElement) {
           return;
        }

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

	$this->module->registerEvent('systemSwitchElementActivity', [$page->getName()], null, null);
}

Также создадим файл с языковыми константами i18n.ru.php в папке /classes/components/events/ и добавим в него следующий код:

<?php

    $i18n = [
        'systemModifyElement' => 'Изменение страницы',
        'systemModifyElement_msg' => 'Пользователь <a href="%s">%s</a> изменил страницу "%s"',
        'systemModifyElement_new' => 'Измененные страницы',
        'systemModifyElement_img' => '/images/cms/admin/mac/icons/medium/content.png',
        'systemSwitchElementActivity' => 'Смена активности страницы',
        'systemSwitchElementActivity_msg' => 'Пользователь <a href="%s">%s</a> сменил активность страницы "%s"',
        'systemSwitchElementActivity_new' => 'Смена активности страницы',
        'systemSwitchElementActivity_img' => '/images/cms/admin/mac/icons/medium/content.png',

    ];

Теперь в модуле События будет появляться событие об изменении страницы и изменении активности страницы.