В каком порядке лучше указывать вызов события?
При написании плагина, как правило, его работа подписывается на событие ( например OnDocFormSave ) в конструкции «switch () {case» (можно и др.).
Когда действие плагина ограничивается конкретным каталогом или документом добавляется условие if ($parent == «14»).
Так вопрос в том, как правильно, какой из операторов включать в другой:
Когда действие плагина ограничивается конкретным каталогом или документом добавляется условие if ($parent == «14»).
Так вопрос в том, как правильно, какой из операторов включать в другой:
if ($parent == "14"){
switch ($modx->event->name) {
case 'OnDocFormSave':
...
break;
}
}
Или наоборот. Работают оба варианта! А как лучше? как правильно? Комментарии: 9
switch ($modx->event->name) как правило используется для плагинов, содержащих в себе несколько событий. В таком случае проверку на родителя лучше делать ВНУТРИ, т.к. в некоторых событиях родителя может не быть в принципе.
В случае, если у вас плагин срабатывает только на одно событие, то делать проверку можно параллельно:
В случае, если у вас плагин срабатывает только на одно событие, то делать проверку можно параллельно:
if ($modx->event->name == 'OnDocFormSave' && $resource->get('parent') == "14") {
//...
}
Спасибо, в моем конкретном случае события два и оба под фильтром «парент 14».
лучше делать ВНУТРИпочему? можете разъяснить? с чем это связано? Обратные аргументы — минимизация кода.
Так, я же уже пояснил — «в некоторых событиях родителя может не быть в принципе». Если у вас все события имеют данный параметр и он одинаковый для каждого из них — оба варианта подойдут.
Проверка на события используется если в одном плагине работаете с несколькими событиями. В данном случае получается нагляднее сначала разделить код на события. Если оно одно, то такая проверка условна.
Спасибо. Плагин работает с несколькими событиями.
if ($parent == "14"){
switch ($modx->event->name) {
case 'OnBeforeDocFormSave':
...
break;
case 'OnDocFormSave':
...
break;
}
}
Какой изъян такого написания? Если запинтуть if внутрь — будет избыточный код.
Все ок. Но в таком варианте я бы написал первой строчкой
if (...!=...) {return;}
Чтобы дальше в плагин не тащить вложенность в if.
Конечно, при условии, что речь либо о вышеперечисленных событиях либо о других, в момент которых объявлен $parent.
Отлично! спасибо!
резюме: В ответе на топик, можно считать оба варианта равны в смысле расходования ресурсов системы, но первый более оптимален :)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.