2

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

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

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

  • 管理员/控制器/模块/testo.php
  • admin/view/template/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 写入文本文件,没有什么棘手的。

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

我错过了什么吗?有什么我不明白的吗?请帮忙,因为绝对没有文档,而且我处于死胡同(暂时)

4

2 回答 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 将搜索目录/控制器/模块/testo.php 文件,并在执行“post.order.add”触发器时调用它的 on_order_add() 函数(因为目录端的触发器将使用目录/* 或其他它将使用 admin/*),'testo' 只是名称部分,需要注意。

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

catalog/controller/model/testo.php

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

于 2015-11-21T09:54:23.150 回答
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."); 
    }
}
?>

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

于 2017-08-12T17:40:52.067 回答