OpenCart在Controller外部加载模型

itd*_*itd 11 php opencart

我正在开发一个OpenCart项目,需要大量的自定义.对于我的项目,我必须更改购物车库中的某些内容(system/library/cart.php).

我必须调用在产品模型(catalog/model/catalog/product.php)中定义的自定义函数.

在控制器中,加载模型并使用其功能很简单:

    $this->load->model("catalog/product");
    $this->model_catalog_product->customFunction();
Run Code Online (Sandbox Code Playgroud)

但是如何在控制器外部加载模型?您无法创建模型的新实例,我已经尝试过:

    require_once("catalog/model/catalog/product.php");
    $a_model = new ModelCatalogProduct();
Run Code Online (Sandbox Code Playgroud)

这显然不起作用,因为模型不打算以这种方式使用.

我也尝试使用范围解析运算符(ModelCatalogProduct :: customFunction())它也不起作用.

我可以将所有必需的信息作为参数传递,但我宁愿在cart库类中使用该模型,因为更改将是全局的.

甚至可以在OpenCart中加载控制器外的模型吗?

Jay*_*ord 17

如果只需要复制一种方法,最好将方法添加到Cart类本身.该Cart班将与工作$this->db->query()电话,因为它已经$db分配给它,即使它不是一个控制器/型号

编辑

如果您希望这样做,您可以执行类似以下操作

public function test() {
    global $loader, $registry;
    $loader->model('catalog/product');
    $model = $registry->get('model_catalog_product');
    $result = $model->getProduct(123);
}
Run Code Online (Sandbox Code Playgroud)


sha*_*yyx 7

您可以在受控制的范围之外加载模型.

如果您需要在另一个模型中加载模型,您可以使用相同的方式加载它$this->load->model('my_module/my_model');.

如果您需要在模板文件或其他自定义PHP脚本中加载模型,请查看instanciated 的index.php文件Registry- 您需要以相同的方式实例化它.所以您的自定义代码可能如下所示:

$registry = new Registry();
$my_model = $registry->load->model('my_module/my_model');
$my_model->customFunction();
Run Code Online (Sandbox Code Playgroud)

无论如何,我强烈建议不要编辑/更改核心库文件,除非您确定没有其他方法可以实现/执行您需要的操作.

正如杰伊吉尔福德提出的那样,我会实现该功能,或者它catalog/checkout/cart.php可能confirm或者success根据您想要实现的范围和功能调用它.