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」はどこから来たのですか?

フォーラム以外に開発者向けドキュメントがないようです。

4

2 に答える 2

6

OpenCart のローダー クラスは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 に答える