Opencart addOrderHistory 事件不起作用
Opencart addOrderHistory events not working
我正在为 opencart 开发自定义支付方式。我需要的是听取订单历史变化,这些变化是由经理从管理员处更改的。一切正常,但无论我做什么,我都无法使 opencart 事件触发器工作。
这是现在的样子:
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 trigger($event, array $args = array()) {
// echo 'Event fired: '.var_dump($event);
$log = new Log('events.log');
$log->write('Event fired: '.$event);
foreach ($this->data as $trigger => $actions) {
if (preg_match('/^' . str_replace(array('\*', '\?'), array('.*', '.'), preg_quote($trigger, '/')) . '/', $event)) {
foreach ($actions as $action) {
$result = $action->execute($this->registry, $args);
$log->write('Action executed: '.$action->getId());
$log->write('Action result: '.$result);
if (!is_null($result) && !($result instanceof Exception)) {
return $result;
}
}
}
}
}
我首先看到的是事件名称可以,但我无法读取操作路径(路线)。所以我改变了我的安装方法:
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' 的行,无论如何它都不需要实现我需要的...
然后最有趣的部分来了
如果您转到 total/voucher 事件回调,您将看到该方法声明为:
public function send($route, $output, $order_id, $order_status_id)
完全错误不要拿来举例!如果你启用它,在你的日志中会看到像 'could not call...' 这样的异常。这是因为事件方法收到 3 个参数,它们都应该是引用。现在我的功能看起来像这样(我的意思是我的付款方式):
public function send_instructions(&$route, &$data, &$output)
$route 是一个名称路由调用。 $data 是一个事件参数数组(0 => order_ir, 2 => order_state_id e t.c。)如果你愿意,你可以删除后方法的 $output,它通常是 NULL .我个人删除了它...
你来了!一切正常。我希望它对某人有所帮助 :) 不要忘记删除 event.php...
中的日志
调试 Opencart 3+ 中的事件
查找并替换(或注释并插入)波纹管函数到文件中 'system/engine/event.php'.
public function trigger($event, array $args = array()) {
$log = new Log('events.log');
$log->write('Event fired: '.$event);
foreach ($this->data as $value) {
if (preg_match('/^' . str_replace(array('\*', '\?'), array('.*', '.'), preg_quote($value['trigger'], '/')) . '/', $event)) {
$result = $value['action']->execute($this->registry, $args);
$log->write('Action executed: '.$value['action']->getId());
$log->write('Action result: '.$result);
if (!is_null($result) && !($result instanceof Exception)) {
return $result;
}
}
}
}
我正在为 opencart 开发自定义支付方式。我需要的是听取订单历史变化,这些变化是由经理从管理员处更改的。一切正常,但无论我做什么,我都无法使 opencart 事件触发器工作。
这是现在的样子:
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 trigger($event, array $args = array()) {
// echo 'Event fired: '.var_dump($event);
$log = new Log('events.log');
$log->write('Event fired: '.$event);
foreach ($this->data as $trigger => $actions) {
if (preg_match('/^' . str_replace(array('\*', '\?'), array('.*', '.'), preg_quote($trigger, '/')) . '/', $event)) {
foreach ($actions as $action) {
$result = $action->execute($this->registry, $args);
$log->write('Action executed: '.$action->getId());
$log->write('Action result: '.$result);
if (!is_null($result) && !($result instanceof Exception)) {
return $result;
}
}
}
}
}
我首先看到的是事件名称可以,但我无法读取操作路径(路线)。所以我改变了我的安装方法:
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' 的行,无论如何它都不需要实现我需要的...
然后最有趣的部分来了 如果您转到 total/voucher 事件回调,您将看到该方法声明为:
public function send($route, $output, $order_id, $order_status_id)
完全错误不要拿来举例!如果你启用它,在你的日志中会看到像 'could not call...' 这样的异常。这是因为事件方法收到 3 个参数,它们都应该是引用。现在我的功能看起来像这样(我的意思是我的付款方式):
public function send_instructions(&$route, &$data, &$output)
$route 是一个名称路由调用。 $data 是一个事件参数数组(0 => order_ir, 2 => order_state_id e t.c。)如果你愿意,你可以删除后方法的 $output,它通常是 NULL .我个人删除了它...
你来了!一切正常。我希望它对某人有所帮助 :) 不要忘记删除 event.php...
中的日志调试 Opencart 3+ 中的事件
查找并替换(或注释并插入)波纹管函数到文件中 'system/engine/event.php'.
public function trigger($event, array $args = array()) {
$log = new Log('events.log');
$log->write('Event fired: '.$event);
foreach ($this->data as $value) {
if (preg_match('/^' . str_replace(array('\*', '\?'), array('.*', '.'), preg_quote($value['trigger'], '/')) . '/', $event)) {
$result = $value['action']->execute($this->registry, $args);
$log->write('Action executed: '.$value['action']->getId());
$log->write('Action result: '.$result);
if (!is_null($result) && !($result instanceof Exception)) {
return $result;
}
}
}
}