Opencart 2:未触发事件

问题描述 投票:2回答:2

我正在使用opencart版本2.1.0.1并尝试使用新的脚本通知系统。请注意,我只是安装了原始版本。没有额外添加或修改。

按照此处的教程:http://isenselabs.com/posts/opencart2-event-system-tutorial我设法创建一个新模块并成功安装。我可以从数据库确认它已经注册了我想要触发的事件。

为了给你一个更好的图片,我创建了这些文件:

  • 管理员/控制器/模块/ testo.php
  • 管理员/视图/模板/ module.testo.tpl
  • 管理员/语言/英文/模块/ testo.php
  • 目录/控制器/模块/ testo.php

现在虽然管理事件被触发没有问题,但目录(前端)订单事件永远不会触发。

在admin / controller / module / testo.php函数安装上,我有以下调用:

$this->model_extension_event->addEvent('testo', 'post.order.add', 'module/testo/on_order_add');

根据教程,要触发的函数应该在catalog / controller / model / testo.php中

public function on_order_add($order_id) { .... }

该函数只是将order_id写入文本文件,没有什么棘手的。

因此,当我完成订单时,该功能永远不会运行。我已经尝试了大多数订单通知挂钩而没有运气。

我错过了什么吗?有什么我不理解的吗?请帮助,因为绝对没有文件,我在死胡同(当时)

php opencart opencart2.x opencart-events
2个回答
1
投票

您正在调用它,您的目录文件路径必须是

catalog/controller/module/testo.php

catalog/controller/model/testo.php

因为你的触发器是

$this->model_extension_event->addEvent('testo', 'post.order.add', 'module/testo/on_order_add');

这意味着 - > Opencart将搜索目录/ controller / module / testo.php文件,当'post.order.add'触发器将执行时将调用它的on_order_add()函数(因为在目录端触发它将使用catalog / *或其他它将使用admin / *),'testo'只是名称部分,注意到重要。

在您的情况下,它正确搜索,但您在此路径上没有任何文件,因为您已将文件添加到

catalog/controller/model/testo.php

所以更改您的文件夹结构 - >模型到模块或将您的触发器从模块更改为模型。


0
投票

你确定写入文本文件是否有效?

因为我也尝试在我的Opencart 2.0.3.1上获得post.order.add事件,并且它工作正常。

尝试写入日志文件

<?php

class ControllerModuleTesto extends Controller
{
    public function on_order_add($order_id)  
    {
        $this->log->write("Order Id " . $order_id . " was created."); 
    }
}
?>

并检查后端的日志 - >工具 - >错误日志

© www.soinside.com 2019 - 2024. All rights reserved.