私は opencart Version 1.5.1.3に取り組んでいます。ある段階で、管理側コントローラー ファイルでフロント サイド モデル関数を使用したいと考えています。
誰でも私を助けてもらえますか?ありがたいです。
遅いことはわかっていますが、将来の作業に役立つかもしれません。
に関数を追加するだけです/system/engine/loader.php
。しかし、これを直接行うと、将来的に害を及ぼす可能性があることを知っているかもしれません. を通してそれを行いvqmod
ます。方法を説明します:
<?xml version="1.0" encoding="UTF-8"?>
<modification>
<id>Loadin Catalog Models</id>
<version>1.0</version>
<vqmver>2.X</vqmver>
<author>Hossein Shahsahebi</author>
<file name="system/engine/loader.php">
<operation info="Add function which I could access catalog models from admin">
<search position="after"><![CDATA[
protected $registry;
]]></search>
<add><![CDATA[
public function catalogModel($model) {
$file = DIR_CATALOG . 'model/' . $model . '.php';
$class = 'Model' . preg_replace('/[^a-zA-Z0-9]/', '', $model);
if (file_exists($file)) {
include_once($file);
$this->registry->set('model_' . str_replace('/', '_', $model), new $class($this->registry));
} else {
trigger_error('Error: Could not load model ' . $model . '!');
exit();
}
}
]]></add>
</operation>
</file>
</modification>
このコードをファイル名に入れyour_own_chosen_name.xml
て、/vqmod/xml
.
たとえばshipping/flat
、admin でカタログ ディレクトリのモデルを使用するには、次のようにします。
$this->load->catalogModel('shipping/flat');
簡単に言えば、できません。管理者側に同じ名前が存在しない場合はモデルファイルを複製するか、管理者側のモデルファイルに必要なメソッドを追加する必要があります。
これは私がやったことです: モデル catalog/model/foo/frontbar.php と別のモデル admin/model/foo/adminbar.php があります
adminbar.php に frontbar.php をインクルードしてから、frontbar のメソッドにアクセスします。
adminbar.php で次のようにします。
<?php
include_once __DIR__.'/../../../catalog/model/foo/frontbar.php';
class ModelFooAdminbar extends Model {
private $frontInstance;
public function fromFront()
{
if(!$this->frontInstance){
$this->frontInstance = new ModelFooFrontbar($this->registry);
}
return $this->frontInstance;
}
}
?>
次に、管理コントローラーで次のようにします。
$this->load->model('foo/adminbar');
$this->data['someFrontData'] = $this->model_foo_adminbar->fromFront()->getSomeMethodInFrontbar();