Advanced Add-on チュートリアル
このチュートリアルでは フック やPre- and Post- コントローラー を使用するような高度なテクニックのアドオン作成方法を説明します。
このチュートリアルでは PHPフック と テンプレートフック の両方を使うアドオンを作成します。
このチュートリアルで作成するアドオンはログイン済みのユーザーが閲覧したカテゴリーの情報を収集します。さらに、ユーザーが閲覧したカテゴリーのアクセス数を管理パネルのダッシュボードに表として表示します。
必要環境
このチュートリアルを行うためは、インストールされたCS-Carが必要になります。
PHPやSmarty、CS-Cartアドオンディレクトリ構造に慣れることが重要です。
このチュートリアルを進める前に 「Hello World」Addonチュートリアル を先に行うことをお勧めします。
アドオン初期設定: addon.xmlとinit.phpの作成
インストールしたCS-Cartのルートディレクトリ内の_app/addons_ ディレクトリに移動し、_advanced_addon_というサブディレクトリを作成します。
このディレクトリに以下の内容を含んだaddon.xml ファイルを作成します:
addons/advanced_addon/addon.xml
<?xml version="1.0"?>
<addon scheme="3.0">
<id>advanced_addon</id>
<version>1.0</version>
<priority>100500</priority>
<position>0</position>
<status>active</status>
<default_language>ja</default_language>
<queries>
<item>DROP TABLE IF EXISTS ?:advanced_addon_data;</item>
<item>
CREATE TABLE `?:advanced_addon_data` (
`user_id` int(11) unsigned NOT NULL DEFAULT 0,
`categories` text NOT NULL DEFAULT '',
PRIMARY KEY (`user_id`)
) Engine=MyISAM DEFAULT CHARSET UTF8;
</item>
<item for="uninstall">DROP TABLE IF EXISTS ?:advanced_addon_data;</item>
</queries>
</addon>これに対応する言語ファイルは以下となります。
/var/langs/ja/addons/advanced_addon.po
さらに同じディレクトリに以下の内容を含んだ_init.php_ファイルを作成します。
addons/advanced_addon/init.php
👍 ヒント
通常、関数名はひと目で分かるように書かれています。 (例えば、
get_productは”一つの”商品情報を取得する関数です)フックは通常、 (例えばget_products_preとget_products_post )名称に応じて前処理や後処理のフックのために
_preまたは_postという接尾辞が付いていて、中に置かれている機能にちなんで命名されています。
このファイル(init.php)では、カテゴリーデータを取得する特定のクエリの前に呼び出されるget_category_data_pre フックに接続しようとしていることを表しています。
Hooks baseツールでは、この他のフックについての情報を検索することが出来ます。
データの取得: func.php
アドオンディレクトリ(app/addons/advanced_addon ) に_func.php_ ファイルを作成します。このPHPファイルは、フックを埋め込むための関数を含んでいます。
addons/advanced_addon/func.php
関数fn_advanced_addon_get_category_data_pre() は現在表示されているカテゴリーを取得し、ストアを閲覧している人とリンクしてこのデータベースを格納します。
👍 ヒント
PHPコード・フックの関数名は命名規則に従って書いて下さい:
fn_ + [addon id] +_+ [hook name]
命名規則が正しくない関数は無視されます。
管理パネルにデータを表示する(index.post.tpl, index.post.php)
管理パネルに取り出したデータを表示するためには、管理パネルのダッジュボードテンプレート(design/backend/templates/views/index/index.tpl )のフックを利用して新しいデータブロックを表示します。
design/backend/templates/addons ディレクトリに移動し、advanced_addon ディレクトリを作成してください。
このディレクトリにサブディレクトリとして_hooks_を作成し、さらにその中に_index_ディレクトリを作成します。
このディレクトリ(design/backend/templates/addons/advanced_addon/hooks/index)に次の内容を含んだ index.post.tpl ファイルを作成します:
design/backend/templates/addons/advanced_addon/hooks/index/index.post.tpl
👍 ヒント
PHPコード・フックとは違い、テンプレート・フックは、他のファイルで宣言する必要はありません。
適切な名前のついたディレクトリに適切に名前の付けられたテンプレートを置くだけで動作します。その条件は以下の通りです:
design/backend/templates/addons//hooks ・・・管理パネル用ディレクトリ
var/themes_repository/basic/templates/addons//hooks ・・・ショップフロント用ディレクトリ
var/themes_repository/basic/mail/templates/addons//hooks ・・・メールテンプレート用ディレクトリ
さらに上記のディレクトリの中に次のような名称のテンプレートファイル(.tplファイル)を作成する必要があります。: [template name]/[hook name].[pre|post].tpl
テンプレートファイルだけでは、データベースからデータを取得することはできません。これらの処理は、_index.php_のコントローラの「ポストコントローラ」で実行する必要があります。
app/addons/advanced_addon ディレクトリに移動し、サブディレクトリ_controllers/backend_ を作成します。
作成したディレクトリで _index.post.php_という名称で下記の内容が書かれたPHPファイルを作成してください:
app/addons/advanced_addon/controllers/backend/index.post.php
すべてのファイルパスや名前、ファイルの内容が正常に作動することをよく確認して下さい。
動作確認
ファイルをアップロード後、まずはアドオンを確認します。 CS-Cartの管理パネルの_アドオン→アドオン管理_に移動します。
リストからAdvanced Add-onを探し、アドオン名の近くにある【インストール】をクリックします。
インストールが無事に完了すると通知が表示されます。
ダッジュボードに移動して、ページの下部を確認して下さい。 以下の画像に似た新しいセクションが表示されているはずです。
ご覧の通り、これといったデータはありませんがダッシュボードに新しいセクションが表示されました。
ブラウザをショップフロントに切り替えて、お客様としてログインしてストア内をいろいろ検索してみてください。ランダムにカテゴリーを表示するだけでも結構です。さらに、これとは異なるユーザーアカウントでも同じように試してみてください。
管理パネルのダッシュボードページをリロードし、Viewed categoriesの状態を確認してください:
このセクションにはあなたが閲覧したカテゴリーが表示されているはずです。
独自のスタイルを適用する
管理パネルのデザインに合わせて作成したアドオンから特別なCSSを読み込む方法を説明します。
CSS(.less)を作成する。
1で作成したファイルを読み込むテンプレートフックを作成する。
このアドオンから利用するCSS(.less)は以下のディレクトリに作成します。
/design/backend/css/addons/advanced_addon/styles.less (ファイル名「styles.less」は自由に決めることが出来ます。)
CSSを読み込むテンプレートフックのファイルを作成する。
/design/backend/templates/addons/advanced_addon/hooks/index/styles.post.tpl
ファイルの中には以下のようにします。 これで1で作成したファイルを読み込むHTMLソースが書き出されます。
テンプレートキャッシュをクリアし、再度ダッシュボードを表示してください。 このようにアドオンで使用するCSSファイルやJavascriptファイルを作成し、読み込むことが出来ます。
最終更新