magr0s 07 апреля 2016 0 2
Здравствуйте.
Помогите выяснить про события в МОДХ
например, ели у нас есть событие 'OnSiteTest' и в коде процессора сделать вызов
$this->modx->invokeEvent('OnSiteTest')

то плагин навешенный на это событие сработает?

и второй вопрос есть ли возможность переопределения базовых событий
например (я так понимаю) если 404 то возникает событие которые перенаправляет пользователя на страницу из настроек системы. Возможно ли это изменить?

Спасибо.
2 комментария
Tramp13571
Tramp1357 07 апреля 2016г в 15:04 #
если 404 то возникает событие которые перенаправляет пользователя на страницу из настроек системы. Возможно ли это изменить?
Да. Вешаешь плагин на событие 'OnPageNotFound', и если из него делаешь exit(), то остальные обработчики не сработают.
m
magr0s 07 апреля 2016г в 15:18 #
другие в рамках события?

кастомный плагин с приоритетом 0 всегда будет выполнятся раньше других?
Fi1osof1
Fi1osof 07 апреля 2016г в 15:49 #
Саша, exit() — это слишком жестко :) Это вообще обломит всю работу сайта. Смотри метод MODx::invokeEvent(), там есть обрыв выполнения плагинов. То есть создаешь плагин на это событие, выставляешь очередность более приоритетную и в плагине вызываешь $modx->event->stopPropagation(); Все, далее плагины не будут вызваны.
Tramp13571
Tramp1357 07 апреля 2016г в 15:52 #
Не знал :)
Пользовался твоим кодом до сих пор, был доволен.
Согласен, возможно, узкая задача :)
Fi1osof1
Fi1osof 07 апреля 2016г в 15:54 #
Там exit() что есть, что нету, так как сам метод $modx->request->prepareResponse() в итоге, доходя до modResponse(), приходит к нему. Но в большинстве других случаев это будет смерть сайту.
Fi1osof1
Fi1osof 07 апреля 2016г в 15:54 #
*modresponse — не метод, класс.
Tramp13571
Tramp1357 07 апреля 2016г в 15:55 #
Спасибо, буду знать.
Fi1osof1
Fi1osof 07 апреля 2016г в 15:55 #
Не за что.
spector1
spector 07 апреля 2016г в 16:32 #
ели у нас есть событие 'OnSiteTest' и в коде процессора сделать вызов
$this->modx->invokeEvent('OnSiteTest')
то плагин навешенный на это событие сработает?
Что бы обращаться к событию, необходимо чтобы такое событие было в таблице системных событий modx modx_system_eventnames
spector1
spector 07 апреля 2016г в 16:56 #
т.е.
1. добовляем событие

$e = $modx->newObject('modEvent');
$e->set('name', 'OnSiteTest');
$e->set('service',1); 
$e->set('groupname', 'custom');
$e->save();


2. Вешаем на него какойнить плагин

3. Теперь можно дергать этот плагин через вызов события OnSiteTest
$this->modx->invokeEvent('OnSiteTest')

Авторизуйтесь или зарегистрируйтесь (можно через соцсети ), чтобы оставлять комментарии.