#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
. (или /после)
Никакое другое событие при изменении заказа не сработало. (вероятно, это событие является единственным событием администратора, остальные — из каталога).
Если я ошибаюсь, пожалуйста, поправьте меня!