Opencart 2:未触发事件

时间:2015-11-16 16:17:39

标签: php opencart opencart2.x opencart-events

我正在使用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写入文本文件,没有什么棘手的。

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

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

2 个答案:

答案 0 :(得分: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将搜索catalog / controller / module / testo.php文件,当'post.order.add'触发器将执行时将调用它的on_order_add()函数(因为在目录端触发它将使用catalog / *或者它将使用admin / *),'testo'只是名称部分,非常重要。

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

catalog/controller/model/testo.php

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

答案 1 :(得分: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."); 
    }
}
?>

并检查后端的日志 - &gt;工具 - &gt;错误日志