开放式车外负载模型控制器编辑

2022-08-31 00:47:50

我正在开发一个OpenCart项目,这需要大量的定制。对于我的项目,我必须在购物车库中更改一些东西(系统/库/购物车.php)。

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

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

    $this->load->model("catalog/product");
    $this->model_catalog_product->customFunction();

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

    require_once("catalog/model/catalog/product.php");
    $a_model = new ModelCatalogProduct();

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

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

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

是否可以在 OpenCart 中将模型加载到控制器外部?


答案 1

如果只需要复制一个方法,则最好向类本身添加一个方法。该类将使用已分配给它的调用,即使它不是控制器/模型CartCart$this->db->query()$db

编辑

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

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

答案 2

您可以在受控模型之外加载模型。

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

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

$registry = new Registry();
$my_model = $registry->load->model('my_module/my_model');
$my_model->customFunction();

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

正如 Jay Gilford 所建议的那样,我将实现该函数,或者它对 的调用,可能或取决于您要实现的范围和功能。catalog/checkout/cart.phpconfirmsuccess


推荐