Как в плагине понять, открывается на редактирование или создается ресурс?

Для категорий и товаров minishop2 нужно назначать разные шаблоны, в зависимости от родителя.
Создаю плагин на событие OnBeforeDocFormSave
if ($grannyId==3 and $resource->get('class_key')=='msProduct'){
        $resource->set('template', 5);
        
        return true;
    }
И все бы работало хорошо, но этот плагин назначает шаблон и сохраняет (насколько я понимаю ресурс).
И в этот момент в журнал ошибок modx падает ошибка, что мол нельзя сохранять товар без цены.
Error HY000 executing statement:
INSERT INTO `modx_ms2_products` (`id`, `article`, `price`, `old_price`, `weight`, `vendor`, `made_in`, `new`, `popular`, `favorite`, `source`) VALUES (199, '', '', '', '', 0, '', 0, 0, 0, 2)
Array
(
    [0] => HY000
    [1] => 1366
    [2] => Incorrect decimal value: '' for column 'price' at row 1
)

Хотя внешне все срабатывает как нужно. Проблему можно решить назначая вместе с шаблоном в плагине и цену, но этот ведь плагин будет срабатывать и при открытии существующего ресурса, а значит переписывать цену существующего товара.
Логика подсказывает, что должен быть способ определять создаем ли мы новый ресурс или открываем на редактирование старый. Подходящего по названию системного события не нашел тут docs.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins/system-events/
Александр Мельник
23 апреля 2019, 17:11
modx.pro
539
0

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

Илья Уткин
23 апреля 2019, 20:14
1
+1
В плагине доступна переменная $mode — new или upd
    Александр Мельник
    23 апреля 2019, 20:16
    0
    о как. Спасибо. Я правильно понял, нужно сравнивать со строкой? if $mode=='upd'?
      Илья Уткин
      23 апреля 2019, 20:20
      0
      Да, типа того. Можно сравнивать со значением константы. Так, наверное, правильнее — if ($mode == modSystemEvent::MODE_UPD)
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
4