Создание своего события в MODX
Сижу посматриваю исходники minishop. Заинтересовался созданием собственных событий в MODX.
Если да, то каким образом теперь его отследить?
Реально ли сделать так —
Каким макаром сделать чтобы свое событие появилось в создание плагина? В базу лезть и ручками добавлять или?
Короче у меня одни вопросы…
Буду рад, если кто нибудь немного осветит эту тему!
Заранее благодарю!
$response = $this->ms2->invokeEvent('msOnBeforeAddToOrder', array(
'key' => $key,
'value' => $value,
'order' => $this
));
Правильно ли я понял что вот данный кусок кода и вызывает событие?Если да, то каким образом теперь его отследить?
Реально ли сделать так —
$modx->invokeEvent('myEvent');
и затем создать плагин на это событие?Каким макаром сделать чтобы свое событие появилось в создание плагина? В базу лезть и ручками добавлять или?
Короче у меня одни вопросы…
Буду рад, если кто нибудь немного осветит эту тему!
Заранее благодарю!
Поблагодарить автора
Отправить деньги
Комментарии: 8
Вот тут чуть ниже середины есть раздел Custom Events, описывающий что куда.(Кратко: сначала нужно создать евент через апи, а только потом использовать)
Правильно ли я понял что вот данный кусок кода и вызывает событие?Да.
Реально ли сделать такКонечно.
В базу лезть и ручками добавлять или?Или твой пакет должен создавать события при своей установке.
Короче, ничего сложного. Нужно всего 3 составляющих:
— Событие в БД с произвольным именем
— Плагин, у которого оно отмечено
— Вызов этого события в любом месте MODX.
да все получилось! Спасибо!
Приведу небольшой пример на пакете — Office, может кому пригодится…
Допустим хотим ограничить доступ пользователей по email. Пускать только разрешенные email.
1. создаем свое событие для плагина
Допустим хотим ограничить доступ пользователей по email. Пускать только разрешенные email.
1. создаем свое событие для плагина
<?php
$Event = $modx->newObject('modEvent');
$Event->set('name', 'OnOfficeBeforeLogin');
$Event->set('service',1);
$Event->set('groupname', 'office');
$Event->save();
проверить создалось ли событие можно так$test = $modx->getObject('modEvent',array('name'=>'OnOfficeBeforeLogin'));
echo $test->get('groupname');
2. добавляем в action.php $modx->invokeEvent('OnOfficeBeforeLogin', array(
'_REQUEST' => $_REQUEST
));
3. пишем плагин на наше событие<?php
switch ($modx->event->name) {
case 'OnOfficeBeforeLogin':
if ($_REQUEST['action']='auth/sendlink') {
$command = $modx->getOption('office_ms2_command', null, "", true);//системная настройка с email участниками
$instructor = $modx->getOption('office_ms2_instructor', null, "", true);//системная настройка с email тренерами
$emails = array_merge(explode(',', $command ),explode(',', $instructor ));
if (!in_array($_REQUEST['email'], $emails)) {
//меняем почту на неправильную для выдачи ошибки
$_REQUEST['email'] = "неправильная";
}
else {
//если есть доступ то ничего не делаем
//или делаем чтото еще)))
}
}
break;
}
Вопрос как вернуть переменную из плагина?
банально
банально
return $properties;
не срабатывает.
rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins
$modx->event->output('Something did not validate!');
Это характерно для сообщений. А для переменных?
Как в $response получить ответ из плагина?
Как в $response получить ответ из плагина?
UPD:
$this->modx->event->returnedValues = $sp;
вот так получилось
P.S. в дополнении кастомном делал.
$this->modx->event->returnedValues = $sp;
вот так получилось
P.S. в дополнении кастомном делал.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.