Events Opencart addOrderHistory事件不工作

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

我正在开发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 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)