第4章 新たな商品フィードの開発

OpenCartには、いくつかの有用な商品フィードが組み込まれていますが、独自の商品フィードを作成することもできます。

OpenCartの商品フィードを作成する方法は、モジュールの作成ととてもよく似ています。そして商品フィードの作成は、OpenCartの基本部分がどのように動作するか学ぶのに、とても良い方法です。

商品フィードをOpenCartで出力する時でも、MVCLデザインパターンに従う必要があります。

このドキュメントでは、管理画面フロントエンド画面で商品フィードを扱うために、どのようにMVCLの各コンポーネントを使用するかを説明します。

4.1 管理画面用フィードの機能性 Admin feed functionality

開発者が作った商品フィードをストアオーナーが使う際には、ストアオーナーは、有効/無効を指定したり特定のオプションを設定したりしたくなるでしょう。

そのため開発者は、管理者向けに設定変更の画面を作成する必要があります。

全ての管理者画面用のファイルは、admin/ フォルダに格納されています。admin/ フォルダ内には、4つのフォルダがあります。

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

全ての商品フィードは、少なくともビューとコントローラの各フォルダに一つずつファイルが必要になります。また、必要に応じて、モデルと言語ファイルも必要になります。通常は、各ファイルは同じ名前を持ちます(ビューだけは .tpl という異なる拡張子にします)。

各ファイルを一つずつ解説します。

4.1.1 コントローラ(Controller)

最初に作成するファイルは、製品フィードのための管理者画面のコントローラです。OpenCartは、admin/controller/feedsフォルダを読み込み、存在する製品フィードを自動的に識別します。上記のフォルダに存在する全ての製品フィードは、自動的に製品フィードページユーザ権限ページに表示されます。ここでは、例としてmy_feed.phpという名前とします。

コントローラは、パブリック関数index()を含みます。これは、編集ボタンがクリックされた時や、ビューからフォームが送信された時に表示される、パブリックな「ページ」です。送信されたデータは、このindex()関数で処理され、コントローラ内のconfigオブジェクトを経由して、データベースの"Settings"テーブルに保存されます。

また、パブリック関数install()も作成する必要があります。この関数は、「エクステンション」ー「フィード」ページにて、該当するフィードの「install」リンクがクリックされたタイミングで呼び出されます。同様に、パブリック関数uninstall()は、「uninstall」リンクがクリックされたタイミングで呼び出されます。これらの関数は、フィードに必要な構造物(データーベースのテーブルや、config設定)の生成や削除に使用できます。フィードが行った全ての変更をきれいに元に戻すために、uninstall関数を作成する事をお勧めします。

4.1.2 ビュー(View)

二番目に必要なファイルは、管理者画面用のビューです。このファイルは、admin/view/template/feed フォルダに作成し、「.tpl」という拡張子をつけます。これはOpenCartのビューの標準の拡張子です。

このファイルでは、管理者が値を変更して送信するためのフォームを生成します。その値は、フィード用のコントローラのindex関数に送信されます。

ビューファイルを作成する最も簡単な方法は、既存の似たようなビューファイルをコピー&ペーストし、必要な項目が正しい形式で含まれるように、フォームを編集する事です。ここでは例としてmy_feed.tplという名前にします。

4.1.3 言語ファイル(Language)

三番目に通常必要なファイルは、言語ファイルです。対応させたい各言語ごとに一つずつ言語ファイルを作成する必要があります。言語ファイルは、admin/language/<language name>/feed フォルダに格納します。言語ファイルは、$_という名のつく単なるPHPの連想配列で、(訳注:プログラム内で使用する、引数としての)内部名と、翻訳後のテキストからなります。言語ファイルは、コントローラやモデルと同じ名前のmy_feed.phpで呼び出せます。

4.1.4 モデル(Model)

フィードでは、管理画面用のモデルが必要になる事はほとんどありません。しかし、作成しようとするフィードがデータベースのテーブルに紐づく場合や、特別なデータ形式を生成するためのクエリが必要な場合、モデルファイルが必要な場合があります。例えば、来訪者カウンタのフィードを作成する場合、来訪者のデータをIPアドレスと訪問回数でデータベースに格納するでしょう。そのためには、モデルファイルを作成し、データベースに新たにテーブルを作成し、そこにモデルファイル内の関数を使ってデータを格納する事になります。モデルファイルは、admin/model/feedフォルダに格納します。モデルファイルは、コントローラや言語ファイルを同じく、my_feed.phpという名前で呼び出す事が出来ます。

4.2 フロントエンド画面用のフィードの機能性(Frontend feed functionality)

フロントエンド画面用のフィードに関しては、上記の管理者用画面と同じパターンです。どのファイルが必要かは、作成するフィードの内容に大きく依存します。フィードは、OpenCartに含まれるどんなモデルも使用できます。データベースへのクエリが既に存在する場合は、再度作成する必要はありません。例えば、catalog/productモデルには、商品に関する多くの有用なクエリが含まれています。これらのモデルに含まれる関数を使用し、「車輪の再発明」を避けましょう。

フロントエンド画面用のフィードの主な違いは、ビューファイルのフォルダがcatalog/view/theme/<テーマ名>/template/feed フォルダとなることです。このフォルダは、管理者用画面のためのビューよりも深い階層になります。これは、フロントエンド画面のためには多くの異なるテーマが利用できるのに対して、管理画面はただ一つだけのテーマのみが使用できるためです。

フロントエンド画面用のフィードは、フィード用コントローラのindex関数がセットしたコントローラのconfigオブジェクトや$settings変数で保存した設定にアクセスできます。これらの設定に基づいて、フロントエンド用の画面表示を制御する事ができます。