В каком порядке лучше указывать вызов события?

При написании плагина, как правило, его работа подписывается на событие ( например OnDocFormSave ) в конструкции «switch () {case» (можно и др.).
Когда действие плагина ограничивается конкретным каталогом или документом добавляется условие if ($parent == «14»).
Так вопрос в том, как правильно, какой из операторов включать в другой:
if ($parent == "14"){
	switch ($modx->event->name) {
		case 'OnDocFormSave':
			...
		break;
	}
}
Или наоборот. Работают оба варианта! А как лучше? как правильно?
Вадим
07 февраля 2017, 12:20
modx.pro
1
1 185
0

Комментарии: 9

Максим Кузнецов
07 февраля 2017, 15:40
0
switch ($modx->event->name) как правило используется для плагинов, содержащих в себе несколько событий. В таком случае проверку на родителя лучше делать ВНУТРИ, т.к. в некоторых событиях родителя может не быть в принципе.

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