Хук order_action.process не передает данные в плагины

1

Используем хук order_action.process в плагине для shop.

Если выполняется системное действие PROCESS кнопкой в "В обработку" то в плагин попадают данные о данном действии.

Но если создать свое действие и привязать к нему поведение "В обработку", то в плагин не передаются данные о данном действии.

Код действия из workflow.php

    'nalozhennyy-platezh' => 
    array (
      'name' => 'Наложенный платеж',
      'options' => 
      'state' => 'nalozhennyy-plat',
      'extends' => 'process',
      'id' => 'nalozhennyy-platezh',
      'classname' => 'shopWorkflowProcessAction',
      'plugin' => false,
      array (
        ....
      ),

7 комментариев

  • +1
    Алексей Алексей Webasyst 4 ноября 2020 17:45 #

    Попробуйте подписаться на хук order_action.nalozhennyy-plat или order_action.nalozhennyy-platezh и посмотреть данные в этом случае.

    • +1
      AlexBelfegor AlexBelfegor 4 ноября 2020 19:03 #

      Глухо как в танке. Не срабатывает хук.

      'order_action.test'	=> 'orderActionProcess',
      'order_action.*'	=> 'orderActionProcess',
      'order_action.nalozhka'	=> 'orderActionProcess',

      • +2
        Eugen Nichikov Eugen Nichikov 4 ноября 2020 21:13 #

        Можно оставить только

        'order_action.*'        => 'orderActionProcess',

        Потом не забыть почистить кэш!

        А сам метод уже выглядит так

            public function orderActionHandler($data, $event_id = null)
            {
                if(!empty($data) && !empty($data['action_id'])) {
                    $event_id = $data['action_id'];
                }
        
                if(empty($data['order_id']) || !$event_id) {
                    return;
                }
        
                if(in_array($event_id, [ 'process', 'nalozhennyy-platezh'])) {
                    // обработка
                }
            }

        Если ещё немного озаботиться настройками, то ID действий можно вынести в настройки плагина. Тогда вообще будет универсально.

        • +1
          AlexBelfegor AlexBelfegor 4 ноября 2020 21:23 #

          Все это хорошо, но бесполезно пока на order_action.* ничего не передается.

          Конечно при описанных выше условия: свое действие и привязать к нему поведение "В обработку".

          Забираю свои слова обратно. Чистка кеша дала результат. Вернуло:

          'order_id' => 17324,
            'action_id' => 'test',
            'before_state_id' => 'nalozhka',
            'after_state_id' => 'nalozhka',
            'id' => 88413,
            'update' => [
              'update_datetime' => '2020-11-04 20:24:32',
            ],

        • +1
          AlexBelfegor AlexBelfegor 4 ноября 2020 21:29 #

          Конечно привязка в пользовательским действиям это хорошо, но не масштабируемо.

          В описании хука order_action.process написано:

          Срабатывает при выполнении действия «В обработку» над заказом.

          Логично передавать и связанные пользовательские действия тоже этот хук.

          • +1
            Eugen Nichikov Eugen Nichikov 4 ноября 2020 21:50 #

            ¯\_(ツ)_/¯

            Чем возможность настраивать - "не масштабируемо"?

            Гипотетически можно тот же один хук использовать, а в нём проверять какой класс отвечает за обработку действия и уже в зависимости от этого включать обработку или нет.

            Но теоретически пользователь может подменить обработчик действия "В обработку", и тогда оно тоже перестанет работать.

          • +1
            AlexBelfegor AlexBelfegor 4 ноября 2020 23:41 #

            Может стоит параметр $extends в классе shopWorkflowAction сделать public что бы было легкого получить от какого действия унаследовано:

            $workflow->getActionById($data['action_id'])->extends

            А то через дамп объекта его как-то не кошерно вытягивать.

            Добавить комментарий

            Чтобы добавить комментарий, зарегистрируйтесь или войдите