Events Opencart addOrderHistory事件不工作
我正在开发opencart的自定义付款方法。我需要的是听订单历史的变化,这是从管理员由经理改变。一切正常,但无论我做什么,我都无法使opencart事件触发器工作 下面是它现在的样子:Events Opencart addOrderHistory事件不工作,events,triggers,opencart,opencart2.3,Events,Triggers,Opencart,Opencart2.3,我正在开发opencart的自定义付款方法。我需要的是听订单历史的变化,这是从管理员由经理改变。一切正常,但无论我做什么,我都无法使opencart事件触发器工作 下面是它现在的样子: public function install() { $this->load->model('extension/event'); $this->model_extension_event->addEvent('delayed_payment_oh_add', 'cat
public function install() {
$this->load->model('extension/event');
$this->model_extension_event->addEvent('delayed_payment_oh_add', 'catalog/model/checkout/order/addOrderHistory/after', 'admin/controller/extension/payment/delayed_payment/send_instructions');
$this->model_extension_event->addEvent('delayed_payment_oh_api', 'catalog/controller/api/order/history/after', 'admin/controller/extension/payment/delayed_payment/send_instructions');
}
public function uninstall() {
$this->load->model('extension/event');
$this->model_extension_event->deleteEvent('delayed_payment_oh_add');
$this->model_extension_event->deleteEvent('delayed_payment_oh_api');
}
而听众本身:
public function send_instructions($route, $output, $order_id, $order_status_id) {
$this->load->model('checkout/order');
$this->log->write(var_dump($output));
echo var_dump($output);
$order_info = $this->model_checkout_order->getOrder($order_id);
if ($order_status_id == $this->config->get('delayed_payment_confirmed_order_status'))
$this->model_checkout_order->addOrderHistory(
$order_id,
$this->config->get('delayed_payment_waiting_order_status'),
$this->config->get('delayed_payment_order_comment'),
true
);
}
它不会将任何内容同时打印到日志或输出。
如何让它工作?(Opencart 2.3)我终于成功了!
这是如何调试Opencart 2.3中的事件
首先,看一下文件'system/engine/event.php'。我们需要记录调用的确切事件,这样才能更改触发器函数。它将所有事件和操作及其结果记录到文件“system/storage/logs/events.log”
我看到的第一件事是事件名称是确定的,但我无法读取操作路径(路由)。因此,我更改了安装方法:
public function install() {
$this->load->model('extension/event');
$this->model_extension_event->addEvent('delayed_payment_oh_add', 'catalog/model/checkout/order/addOrderHistory/after', 'extension/payment/delayed_payment/send_instructions');
}
我改变了路径,删除了带有“api/order/history/after”的行。无论如何,实现我所需要的并不需要它
然后最有趣的部分出现了
如果转到总计/凭证事件回调,您将看到方法声明为:
public function send($route, $output, $order_id, $order_status_id)
这完全是错误的,不要把它当作例子!如果启用它,在日志中会看到类似“无法调用…”的异常。这是因为事件方法接收3个参数,这些参数都应该是引用。现在我的函数看起来像这样(对于我的付款方式,我的意思是):
$route是名为的路由$数据是一个事件参数数组(0=>order_ir,2=>order_state_id e t.c.)。如果需要,可以删除after方法的$output,它通常为NULL。我个人把它拿走了
给你!一切正常。我希望它对某人有所帮助:)别忘了删除event.php中的日志…包含send\u指令函数的文件在哪里?在哪个目录上?@Mojtaba我在admin(admin/controller/extension/payment/delayed_payment.php)和catalog controller(catalog/controller/extension/payment/delayed_payment.php)两个目录中都尝试过“$output”参数并不总是空的。如果在函数之后调用事件,则它包含函数返回的任何值。
public function send($route, $output, $order_id, $order_status_id)
public function send_instructions(&$route, &$data, &$output)