Opencart 3.0.3.7 событие не ловится, не работает

#opencart #opencart-3 #opencart-events

Вопрос:

Примечание: Я прочитал тонны информации здесь и в других источниках, включая официальные документы.

У меня есть расширение для оплаты — например, simplepay.

1. Я хочу знать конкретно, является ли это способом «прослушивания» системного (предопределенного) события.
2. Я хочу запустить некоторую логику, когда статус заказа изменился.

В admin/controller/extension/payment/simplepay.php «У меня есть это» (больше нигде):

 public function install()  {  $this-gt;load-gt;model('setting/event');   /** addEvent($code, $trigger, $action, $status = 1, $sort_order = 0); */  $this-gt;model_setting_event-gt;addEvent(  'do_transaction_on_order_status_change',  'catalog/controller/api/order/history/after',  'extension/payment/simplepay/doTransactionOnOrderStatusChange');  }   public function uninstall()  {  $this-gt;load-gt;model('setting/event');  /** deleteEventByCode($code); */  $this-gt;model_setting_event-gt;deleteEventByCode('do_transaction_on_order_status_change');  }   public function doTransactionOnOrderStatusChange(amp;$route, amp;$data)  {  // testing purpose for the moment  $log = new Log('aaaaaa.log');  $log-gt;write('Route ' . $route);  }  

Событие do_transaction_on_order_status_change должным образом зарегистрировано в списке событий. Что я делаю не так?

Ответ №1:

Неважно!

Через некоторое время я понял, в чем дело.

Мой метод doTransactionOnOrderStatusChange(amp;$route, amp;$data) был написан с 3 параметрами.

Нравится doTransactionOnOrderStatusChange(amp;$route, amp;$data, amp;$output) .

Проблема в том, что OC 3 не принимает третий параметр, даже если есть событие «до» или «после».

И еще одной проблемой было связанное с этим событие: оно должно быть admin/controller/sale/order/history/before . (или /после)

Никакое другое событие при изменении заказа не сработало. (вероятно, это событие является единственным событием администратора, остальные — из каталога).

Если я ошибаюсь, пожалуйста, поправьте меня!