我正在开发一个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)
您可以在受控制的范围之外加载模型.
如果您需要在另一个模型中加载模型,您可以使用相同的方式加载它$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根据您想要实现的范围和功能调用它.
| 归档时间: |
|
| 查看次数: |
16824 次 |
| 最近记录: |