4

据我了解,打开购物车基于 CodeIgniter,但在 CodeIgniter 中加载和使用模型,您可以执行以下操作

$this->load->model('Model_name');

$this->Model_name->function();

在 OpenCart 你做这样的事情

$this->load->model('catalog/product');
$this->model_catalog_product->getTotalProducts()

这是如何工作的,“model_catalog_product”来自哪里?

除了论坛之外,他们似乎还有 0 个开发人员文档。

4

2 回答 2

6

OpenCart 的 loader 类似乎受到了 CodeIgniter 的启发,但并不是基于它。您可以查看 OpenCart 的源代码,请参阅文件system/engine/loader.php(第 39 行)。

public function model($model) {
    $file  = DIR_APPLICATION . 'model/' . $model . '.php';
    $class = 'Model' . preg_replace('/[^a-zA-Z0-9]/', '', $model);                      

    if (file_exists($file)) {
        include_once($file);

        // Right here. Replaces slash by underscore.
        $this->registry->set('model_' . str_replace('/', '_', $model), new $class($this->registry));
    } else {
        trigger_error('Error: Could not load model ' . $model . '!');
        exit();                 
    }
}

您可以清楚地看到它用下划线替换了斜线并附加'model_'在模型名称之前。这就是为什么你最终得到model_catalog_product.

于 2012-11-20T01:28:56.230 回答
2

model_catalog_product来自模型文件夹中的路径文件夹结构和文件名,文件也是如此,model_catalog_product删除model/catalog/product.php了扩展名,斜杠更改为下划线。另外,请注意模型类名称也指类似的结构,即ModelCatalogProduct. 至于文档,有一些针对开发人员的文档,但只是简单地检查了一下,似乎出于某种原因它已被删除。不幸的是,我没有从大量的试验和错误中学到东西,大多数开发人员都在使用它

于 2012-11-20T01:44:02.607 回答