OpenCartのMVC-Lフレームワークでは、あなたの作るコントローラは、言語ファイルやモデルやテンプレートファイル(ビュー)を互いに接続させる接着剤の役目をはたします。 コントローラは、言語ファイルからテキストを取り出し、ビューであるテンプレートクラスからアクセスできるようにする必要があります。
さらにあなたの作るコントローラでは、 親クラスであるControllerクラスから継承した機能を利用できるとともに、 OpenCartにデフォルトで追加されているモデルや関数を利用することができます。
このドキュメントでは、言語ファイルやモデルファイルやその機能をロードし、利用するためのPHPコードを示します。
コントローラは、言語ファイルから文字列を取り出し、テンプレート(ビュー)で表示できるようにするため、変数に格納します。これは、モジュールの翻訳を管理する際に特に便利です。新しい翻訳が必要になった際は、.tplファイルのそれぞれの部分を書き換えるかわりに、言語ファイルを書き換えるだけで済み、コントローラやテンプレート内の変数は書き換える必要がありません。
下記のコードは、言語ファイルをコントローラに読み込みます。丸カッコの中には、languageフォルダからの言語ファイルのパスを記述します。
$this->load->language('module/my_module');
ここで、admin用コントローラはadmin用言語ファイルのみをロードしますが、カタログ用言語ファイルは読み込まない事を覚えておいてください。同様に、カタログ用コントローラはカタログ用言語ファイルのみを読み込みます。いったん言語ファイルがコントローラに読み込まれたら、それらの文字列はPHPの$data配列変数で使用できます。$this->language->get('text') は、言語ファイル内の$_['text']で定義した文字列を取り出します。
$this->data['text'] = $this->language->get('text');
$this->language->get('text')は、上記のように、上記のコードで読み出した言語ファイルの中の$_['text'] 変数を参照します。data配列の全要素は、それぞれ要素名の変数に格納されます。 ビュー内のテンプレートファイルでは、この$data['text']は、$textとして参照できます。$text変数は、ビューの.tplファイルで必要に応じて表示できます。
<p><?php echo $text; ?></p>
下記のコードは、言語ファイル内のテキストを(訳注:HTMLの)ページのヘッダタイトルとして設定します。
$this->document->setTitle($this->language->get('heading_title'));
このコードのタイトル用テキストは、モジュールの言語ファイルに格納されている$_['heading_title'] 変数を使用します。
もしテキストをPHPのセッション情報として格納したい場合は、$this->data['text'] ではなく、$this->session->data['text'] を使用してください。
モデルファイルをコントローラに読み込むと、モジュール内でOpenCartに組み込みの関数を利用できるようになります。モデルファイルに含まれる関数は、ストアのデータベースとやり取りし、情報を読み書きします。自分でデータベース用のクエリを書く替わりに、組み込みの関数を使用する事をお勧めします。少し時間をとって、adminやcatalog内のモデルフォルダを探検してみてください。あなたのモジュールに役立つファイルがあるかもしれません。例えば、あなたの作成したモジュール内で、商品情報をデータベースから取り出したい場合、admin/model/catalog/products.php ファイルが役に立つでしょう。商品データベースとのやり取りする関数などは、あらかじめ組み込みで用意されています。
あなたの作成するモジュールのコントローラは、下記のコードを使って、同じadminやcatalogフォルダにあるどんなモデルでも読み込む事ができます。
$this->load->model('setting/setting');
丸カッコの中には、読み出したいファイルの、adminフォルダからのパスを記述します。上記のコードは、settingsクラスを読み出します。そのおかげで、モデルに紐づくコントローラから、ModelSettingSettingクラス内の関数を使用できます。読み込んだモデルファイルの関数を使用するには、下記の書き方を使用します。
$this->model_setting_setting->editSetting('my_module', $this->request->post);
アンダースコア部は、model/setting/setting.phpというファイルを参照します。あなたが作るモジュール内にモデルファイルを含む場合、モデルファイルをmodelフォルダにアップロードし、上述したフォーマットに従ってアクセスできます。
$this->load->model(module/my_module.php); $this->model_module_my_module->myFunction();
上記のコードは、admin/model/module/my_module.php に置かれているファイルを読み込みます。
ファイル名には、スペースを使う代わりにアンダースコアを使用してください。
コントローラ内でビューのテンプレートファイルを読み込む必要がある場合、下記のように$this->templateを使用してください。
$this->template = 'module/my_module.tpl';
OpenCartには、管理者用画面からもカタログ用画面からも読み込みが可能な、多くのライブラリが含まれています。
それらのファイルは、ストアのルートディレクトリ配下のsystem/library に格納されています。コードの例は、「言語ファイルの読み込み」の章にあります。
$this->load->language と $this->document のどちらでも、ライブラリフォルダ内のlanguage.php と document.php にアクセスできます。
もしライブラリファイルにアクセスしたい場合は、コントローラにて、$this->[ライブラリファイル名]->function()を使って呼び出す事ができます。
コントローラがMVCフレームワークの中でどのような役割を果たすか、OpenCartのモジュール開発の概要をさらに知りたい場合は、「MVC-L 入門」の章や「モジュールの開発」の章を参照してください。
読み込まれたファイルが基本モジュール内でどのように利用できるか知るには、HostJarsの「DIY Module」を参照してください。