第2章 モジュールの開発

OpenCartモジュールの作成は、OpenCartの基本的な機能が実際にはどう働くのか学ぶのに、非常に良い方法です。モジュールを作成する際は、OpenCartの他の部分と同様に、MVCLデザインパターンに従ってください。このドキュメントでは、管理画面フロントエンドのためのモジュールを作るのに必要な、どのようにMVC-Lの各コンポーネントを使用するかを説明します。モジュールを作成する方法のうち、もっとも簡単なのは、HostJarsからDIY用のモジュールビルダのスケルトン(骨組み)をダウンロードすることです。このモジュールは、ディレクトリ構造やファイル、独自モジュールを理解し、どうやってモジュールを作ればよいかの解説が含まれています。このドキュメントは、より理論的なガイドです。

2.1 基本となるディレクトリ構造

モジュール作成のためのフォルダ構成は、管理画面用フォルダとフロントエンド用フォルダの2つに分かれます。各フォルダ内のファイルは、それぞれMVC-Lフレームワークに従います。管理画面用のファイルはバックエンド側の機能のみを含んでいますが、カタログ用のファイルは、フロントエンド用の機能と共に、バックエンド側でも使う機能も含んでいます。モジュールの利用者は、管理画面上で操作や設定を行い、設定内容をストアの管理側に保存します。したがって、adminフォルダ内のファイルは、設定変更や、管理者への情報表示や、インストール/アンインストールなどの全てを取り扱います。同様に、catalogフォルダ内のファイルは、ストアのフロントエンドへの表示や動作を取り扱います。

上記の画像は、あなたが作成するモジュールが従うべきディレクトリ構造のスケルトンです。モジュールを新たに作成する際の良い方法は、フォルダ構成をそのままコピーし、上記のファイルを作成する事です。あなたがどんなモジュールを作ろうとしているかによって、ファイルの内容は変わります。基本的な機能の概要を以下に記します。

2.2 管理画面用モジュールの機能性

ストアのオーナーがあなたの作ったモジュールを使用する時に、ストアオーナーは、モジュールをどんなレイアウトにするか、表示するか否か、などのモジュール固有のオプション設定を変更したい場合があります。そのため、モジュール開発者は、モジュールの設定を編集したり追加したりするための管理画面を作成する必要があります。

全ての管理者用ファイルは、admin/ フォルダにあります。admin/ フォルダには、4つのフォルダが含まれます。

  1. コントローラ(controller)
  2. ビュー(view)
  3. 言語ファイル(language)
  4. モデル(model)

全てのモジュールは、少なくとも、ビューとコントローラとでそれぞれひとつ以上のファイルが必要です。また、ほとんどのモジュールは、モデルと言語ファイルが必要になります。通常それらのファイルは同じ名前にしますが、ビューファイルだけは、「.tpl」という、異なる拡張子を持ちます。

これらのファイルを、一つずつ説明します。

2.2.1 コントローラ

最初に作るべきファイルは、モジュールを管理するインタフェースのためのコントローラです。OpenCartは、単にストア内のadmin/controller/module/ フォルダ内を読み込み、モジュールが存在するか否かを判断します。このadmin/controller/module フォルダに存在する全てのモジュールは、モジュール一覧ページ、ユーザ権限ページに自動的に表示されます。あなたは、コントローラのファイルmy_module.phpを呼び出すことができます。

コントローラファイルは変数内のテキストを変換してテンプレート(訳注:ビュー)に渡すための変数,言語ファイルを読み込める場所です。上記の図では、コントローラは $_['text'] という変数として取り出し、$text という変数でビューに渡します。また、もし存在するなら、複数のモデルファイルや、そのクラスや関数を使う事ができます。読み込むファイルについての詳細は、「コントローラ内でファイルを読み込む」のページを参照してください。

あなたはさらに、install()というパブリック関数を作成する必要があります。この関数は、「エクステンション>モジュール」ページで「インストール」がクリックされたタイミングで呼び出されます。同様に、uninstall()というパブリック関数が、「アンインストール」がクリックされたタイミングで呼び出されます。これらの関数は、(データベースのテーブルや、設定ファイルなどの)作成や削除のために使用できます。モジュールが行った変更をきれいに消去するために、uninstall()関数を作成する事をお勧めします。詳しくは、「モジュールのインストール/アンインストール」のページを参照してください。

2.2.2 URL経由のアクセス

コントローラは、OpenCartのMVC-Lフレームワークの中で、唯一URL経由でアクセスできるファイルです。管理画面上は、URLは「/admin/index.php?route=module/my_module&token」のようになります。カタログファイルはトークンを持ちませんが、管理画面はURLにトークンを含みます。そのため、コントローラファイルは、index()というパブリック関数を実装する必要があります。この関数は、URL経由でアクセス可能な「ページ」として公開され、(訳注:モジュールの)「編集」ボタンがクリックされた時に、ビューのフォームから送信されたアドレスとして表示を行います。送信されたデータは、このindex関数で処理され、コントローラ内のconfigオブジェクト経由でデータベースのsettingsテーブルに保存されます。

2.2.3 ビュー

次に必要なのはビューファイルです。このファイルはadmin/view/template/module フォルダに作成され、「.tpl」という拡張子がつきます。この拡張子のファイルはOpenCartの標準のビューファイルです。このファイルでは、ユーザのための記入フィールドや送信フォームを生成します。送信したデータは、コントローラのindex()関数で受け取ります。

ビューファイルを作成する上で最も簡単な方法は、既存の似たビューファイルから、コピー&ペーストし、あなたが作成するモジュールに合うように各フィールドを修正することです。ビューファイルは、「my_module.tpl」として呼び出す事ができます。

ビューファイル内では、コントローラが言語ファイルを使って翻訳した文字列を、PHP変数として参照できます。どのように行うかは、コントローラ内でファイルを読み込む部分のコードをご覧下さい。

2.2.4 モデル

管理画面用のモジュールでは、モデルファイルを使用することはほとんどありません。しかし、あなたの作成するモジュールが、データベース内の自分で作ったテーブルに依存する場合や、特別な形式のデータを作成するためのカスタムクエリに依存する場合は、モデルファイルを作成する必要があります。

例えば、訪問者カウンタを作成する場合、訪問者ごとにIPアドレスと訪問回数を一緒にデータベースのテーブルに格納する際に、モデルを使用します。その後、OpenCartのデータベース内に新たにテーブルを作成するために、モデルファイルを作成し、関数を追加します。

モデルファイルは、admin/model/module フォルダに格納します。作成したモデルファイル「my_module.php」は、コントローラや言語ファイル同様に呼び出す事ができます。

2.3 フロントエンド画面用モジュールの機能性

フロントエンド画面用のモジュールは、上記で説明した管理画面用モジュールに従って作成します。どのファイルを使用するかは、あなたの作成するモジュールが何をするかによります。モジュールは、OpenCart内に既に存在する全てのモデルファイルにアクセスできます。データベースにアクセスする際に、すでに同じクエリが存在していれば、改めて自分でクエリを作成する必要はありません。

例えば、catalog/product モデルは、商品の情報を取り出すための有用なクエリが多く含まれています。車輪の再発明をする前に、これらの既存のモデルを使ってください。

フロントエンド用モジュールと管理画面用モジュールの主な違いは、ビューファイルを「catalog/view/theme/<themename>/template/module」フォルダに格納するという点です。これは、テーマファイルの違いによるもので、管理画面用のビューよりも大幅に深い階層です。OpenCartでは、フロント側ではたくさんの異なるテーマファイル(テンプレート)が利用できるのに対して、管理画面はただ1つのテンプレートのみを持っています。

あなたのモジュールのフロントエンド部分は、モジュール内で設定したオプション値、(訳注:adminとcatalogの)両方のコントローラのconfigオブジェクト、$settings変数によってコントローラのindex関数に渡された値にアクセスできます。