plugin
plugin
plugin
You also want an ePaper? Increase the reach of your titles
YUMPU automatically turns print PDFs into web optimized ePapers that Google loves.
Ver00.75EC-CUBE 2.12.0プラグイン 仕 様 書Update 2012/01/051
改 訂 履 歴日 付 履 歴 更 新 者 更 新 箇 所2012/3/8 Ver00.01 吉 本 作 成2012/3/8 Ver00.02 吉 本 文 言 を 修 正2012/3/9 Ver00.03 吉 本 文 言 を 修 正 ・テーブル 定 義 を 追 加2012/4/11 Ver00.04 吉 本 β 版 の 仕 様 に 沿 って 修 正2012/4/26 Ver00.50 吉 本 正 式 版 の 仕 様 に 沿 って 修 正2012/5/15 Ver00.60 梶 原 プラグインのライセンスに 関 する 事 項 を 追 記2012/5/19 Ver00.70 吉 本 追 加 仕 様 を 追 加2012/5/26 Ver00.75 吉 本 アーカイブ 作 成 方 法 についてを 追 加Copyright c LOCKON CO.,LTD. All Rights Reserved. 2
目 次1. 参 考 資 料2. プラグインで 出 来 る 事1. 処 理 の 介 入2. テンプレートの 変 更3. トランスフォームの 使 い 方4. プラグインのライセンスについて3. プラグインの 作 り 方1. 作 り 方 概 要2. プラグインファイル 構 成3. アーカイブ 作 成 方 法4. 本 体 ディレクトリ 構 成5. ライセンスの 表 記6. 命 名 規 約7. スーパーフックポイント8. ローカルフックポイント9. SC_FormParamのフック10.SC_ 系 クラスのフックポイント11.テンプレートの 変 更12.ヘッダーにタグ 追 加Copyright c LOCKON CO.,LTD. All Rights Reserved. 3
目 次4. リファレンス1. SC_Helper_Transform2. テーブル 定 義3. 定 数 一 覧Copyright c LOCKON CO.,LTD. All Rights Reserved. 4
1. 参 考 資 料Copyright c LOCKON CO.,LTD. All Rights Reserved. 5
1-1 参 考 資 料・プラグイン 関 連 情 報http://svn.ec-cube.net/open_trac/ticket/1783・サンプルプラグインカテゴリコンテンツhttp://svn.ec-cube.net/open_trac/attachment/ticket/1692/CategoryContents.tar.gzパンくずhttp://svn.ec-cube.net/open_trac/attachment/ticket/1692/TopicPath.tar.gzCopyright c LOCKON CO.,LTD. All Rights Reserved. 6
2.プラグインで 出 来 ることCopyright c LOCKON CO.,LTD. All Rights Reserved. 7
2-1 プラグインで 出 来 る 事・ EC-CUBE 本 体 処 理 へ 介 入 して 処 理 ・ 結 果 を 書 き 換 える。・フックポイント 機 能 を 使 って 実 現・すべてのPageクラス・SCクラスで 介 入 可 能・ EC-CUBE 本 体 テンプレートを 変 更 する。・SmartyのFilter 機 能 をフックする 事 で 実 現・ SC_Helper_Transformというインターフェイスで 簡 単 に 変 更 可 能Copyright c LOCKON CO.,LTD. All Rights Reserved. 8
2-2 処 理 の 介 入● 処 理 の 介 入EC-CUBE 本 体 処 理 へ 介 入 して 処 理 ・ 結 果 を 書 き 換 える。・EC-CUBE 本 体 処 理 にプラグインで 介 入 する 事 が 出 来 ます。・フックポイント( 介 入 箇 所 ) と、フックポイント 通 過 時 に 実 行 する 関 数 をプラグインに 宣 言 する 事 で本 体 処 理 のフックポイント 通 過 時 、 宣 言 した 関 数 が 実 行 されます。EC-CUBE商 品 一 覧PLUGINプラグインメインクラスプラグインのメインクラスに 介 入 したフックポイントと、 呼 び 出 す 関 数 を 宣 言 します。この 場 合 、フックポイントA 指 定 します。PLUGINプラグインメインクラスCopyright c LOCKON CO.,LTD. All Rights Reserved. 9
2-3 テンプレートの 変 更●テンプレートの 変 更EC-CUBE 本 体 テンプレートを 変 更 する。・EC-CUBE 本 体 テンプレートに 変 更 を 加 える 事 が 出 来 ます。・Smartyがコンパイルファイルを 作 る 処 理 にフックします。この 時 、プラグイン 側 にはテンプレートのソースが 文 字 列 で 渡 されます。テンプレートに 対 してSC_Helper_Transformを 使 い 変 更 を 加 えます。EC-CUBE商 品 一 覧テンプレートプラグインには 出 力 するテンプレートが文 字 列 で 渡 される。SC_Helper_Transformタグ・ 識 別 子 を 指 定 してSC_Helper_Transformで 変 更 を 加 える。トランスフォーム 後PLUGINプラグインメインクラスCopyright c LOCKON CO.,LTD. All Rights Reserved. 10
2-4 トランスフォームの 使 い 方●テンプレートの 変 更EC-CUBE 本 体 テンプレートを 変 更 する。・テンプレートの 変 更 はSC_Helper_Transformを 使 う 事 で、 簡 単 に 変 更 する 事 が 出 来 ます。SC_Helper_Transformで 変 更 するソースを 読 み 込 み、 対 象 とする 要 素 を 絞 り 込 んで、 変 更 処 理 を 加 えます。Smartyテンプレート
2-5 プラグインのライセンスプラグインのライセンスは 基 本 的 に 自 由 です。(ただし、プラグインの 作 成 方 法 によってはEC-CUBE 本 体 のライセンスに 抵 触 する 場 合 (その 場 合 、 強 制 的 にGPLライセンスになります)がありますので、 基 本 ルールにのっとり 作 成 してください。 参 照 :3-5 ライセンスの 指 定 方 法 )また、EC-CUBEの 商 用 ライセンスに 矛 盾 するライセンス 形 態 をとった 場 合 、 商 用 ライセンスご 購 入 サイトにプラグインが 導入 できなくなりますので、 注 意 が 必 要 です。以 下 の 点 をご 参 照 いただき、 作 成 者 の 判 断 にてプラグインのライセンスを 選 択 してください。1 推 奨 :プラグインを 無 料 で 配 布 する 場 合 (EC-CUBEオフィシャルサイトで 配 布 する 場 合 )プラグインのライセンスは 商 用 ライセンスに 矛 盾 しないLGPLライセンス もしくは、LGPLライセンスに 矛 盾 しないライセンス(BSDライセンス、MITライセンス 等 )を 推 奨 します。参 照 :LGPLについて( http://ja.wikipedia.org/wiki/GNU_Lesser_General_Public_License )※ 本 マニュアルでは 例 として、LGPLライセンスでの 作 成 方 法 を 記 載 します。( 参 照 :3-5 ライセンスの 指 定 方 法 )2 プラグインを 有 料 配 布 する 等 、 再 配 布 不 可 なプラグインにしたい 場 合プラグインのライセンスは 自 由 に 決 定 することが 可 能 です。ただし、 商 用 ライセンスに 矛 盾 するライセンス 形 態 にした 場 合 、 商 用 ライセンスご 購 入 サイトにて 使 用 することができませんので、ご 注 意 いただき、 作 成 者 の 判 断 にて 作 成 してください。3プラグインのライセンスを 指 定 しない 場 合ライセンスを 指 定 しない 場 合 、プラグインのライセンスはEC-CUBE 本 体 のライセンスを 継 承 し 自 動 的 にGPLライセンスになります。プラグインのライセンスがGPLライセンスの 場 合 、 商 用 ライセンスと 矛 盾 してしまうため、 商 用 ライセンスご 購 入 サイトにプラグインを 導 入 することができなくなります。(EC-CUBEをGPLライセンスのまま 使 用 される 場 合 はプラグインがGPLライセンスでも 問 題 なく 導 入 できます。)Copyright c LOCKON CO.,LTD. All Rights Reserved. 12
3.プラグインの 作 り 方Copyright c LOCKON CO.,LTD. All Rights Reserved. 13
3-1 作 り 方 概 要1 命 名 規 則 に 沿 ってプラグイン 名 ・ファイル 名 を 決 定・ルール・ 機 能 に 則 したプラグイン 名 ・プラグインコード 名 の 徹 底 。・ 命 名 規 則 については 後 述 。http://svn.ec-cube.net/open_trac/wiki/EC-CUBE%E6%A8%99%E6%BA%96%E8%A6%8F%E7%B4%842 必 須 となる 関 数 ・ファイルに 注 意 してプラグインを 作 成・<strong>plugin</strong>_infoにプラグインに 関 連 情 報 を 定 義→インストール 時 にDBに 登 録 されます。・フックポイントで 処 理 に 介 入 (フックポイント 一 覧 は 別 紙 参 照 )・トランスフォームでテンプレートの 変 更 ( 使 用 方 法 は 後 述 )3 必 要 なファイルを 用 意 して 圧 縮 する。・ 必 要 なファイルが 用 意 できたらtar.gzに 圧 縮Copyright c LOCKON CO.,LTD. All Rights Reserved. 14
3-2-1 プラグインファイル 構 成Sample.tar.gzSample.php (プラグインメインクラス) [ 必 須 ]<strong>plugin</strong>_info.php (プラグイン 情 報 ) [ 必 須 ]<strong>plugin</strong>_update.php (アップデートクラス)config.php ( 設 定 クラス)logo.png ( 縦 65x 横 65ピクセル)プラグインメインクラス 宣 言 関 数 一 覧プラグインメインクラスには 下 記 の 関 数 を 定 義 する 事 で、ケースに 応 じて 実 行 されます。installuninstallenabledisableregisterpreProcessprocess必 須必 須installはプラグインのインストール 時 に 実 行 されます。param;プラグイン 情 報 (dtb_<strong>plugin</strong>)の 連 想 配 列uninstallはアンインストール 時 に 実 行 されます。param;プラグイン 情 報 (dtb_<strong>plugin</strong>)の 連 想 配 列enableはプラグインを 有 効 にした 際 に 実 行 されます。param;プラグイン 情 報 (dtb_<strong>plugin</strong>)の 連 想 配 列disableはプラグインを 無 効 にした 際 に 実 行 されます。また、アンインストール 時 にプラグインが 有 効 な 場 合 、uninstallの 前 に 実 行 されます。param;プラグイン 情 報 (dtb_<strong>plugin</strong>)の 連 想 配 列registerはプラグインインスタンス 生 成 時 に 実 行 されます。フックポイントの 登 録 はここで 行 います。param;SC_Helper_PluginのインスタンスpreProcessはスーパーフックポイントを 使 って 実 行 されます。 各 Pageクラスのinit 処 理 で 実 行 されます。param; 呼 び 出 し 元 のLC_PageオブジェクトpreProcessはスーパーフックポイントを 使 って 実 行 されます。 各 PageクラスのsendResponse 処 理 で 実 行 されます。param;LC_PageオブジェクトCopyright c LOCKON CO.,LTD. All Rights Reserved. 15
3-2-2 プラグインファイル 構 成Sample.tar.gzSample.php (プラグインメインクラス) [ 必 須 ]<strong>plugin</strong>_info.php (プラグイン 情 報 ) [ 必 須 ]<strong>plugin</strong>_update.php (アップデートクラス)config.php ( 設 定 クラス)<strong>plugin</strong>_info.php 宣 言 定 数 一 覧logo.png ( 縦 65x 横 65ピクセル)PLUGIN_CODE 必 須 システム 上 でのキーとなります。プラグインコードは 一 意 である 必 要 があります。PLUGIN_NAME 必 須 プラグイン 名 。プラグイン 管 理 ・ 画 面 出 力 (エラーメッセージetc)にはこの 値 が 出 力 されます。CLASS_NAME 必 須 プラグインメインクラス 名 。本 体 がプラグインを 実 行 する 際 に 呼 ばれるクラス。 拡 張 子 は 不 要 です。PLUGIN_VERSION 必 須 プラグインバージョンCOMPLIANT_VERSION 必 須 本 体 対 応 バージョンAUTHOR 必 須 作 者DESCRIPTION 必 須 説 明 文class <strong>plugin</strong>_info {static $PLUGIN_CODE = "SampleClassHook";static $PLUGIN_NAME = "SCクラス フックサンプル";static $PLUGIN_VERSION = "0.1";static $COMPLIANT_VERSION = "2.12.0";static $AUTHOR = “ 株 式 会 社 ロックオン";static $DESCRIPTION = "SC 系 クラスをフックするサンプルです。";static $PLUGIN_SITE_URL = "http://www.ec-cube.net/";static $AUTHOR_SITE_URL = "http:// www.ec-cube.net /";static $CLASS_NAME = "SampleClassHook";static $HOOK_POINTS = array(array("LC_Page_Admin_Products_Category_action_after",'setLogoParameter'),}array("LC_Page_Products_List_action_after", 'replaceLogo'));static $LICENSE = “LGPL";PLUGIN_SITE_URLAUTHOR_SITE_URLプラグイン 用 のサイトURL 設 定 されている 場 合 はプラグイン 管 理 画 面 のプラグイン 名 がリンクになります。作 者 用 のサイトURL。設 定 されている 場 合 はプラグイン 管 理 画 面 の 作 者 名 がリンクになります。HOOK_POINTS 使 用 するフックポイント・コールバック 関 数 。使 用 するフックポイントを 設 定 すると、フックポイントが 競 合 した 際 にアラートが 出 ます。ここで 宣 言 することで、インストール 時 にdtb_<strong>plugin</strong>_hookpointsに 登 録 され、register 関 数 を 書 かずにフックポイントでの 介 入 が 可 能 です。LICENSEプラグインのライセンスを 指 定 します。( 例 :LGPL)ライセンスを 指 定 しない 場 合 、 自 動 的 にGPLライセンスになりますのでご 注 意 ください。( 参 照 :2-5 プラグインのライセンス)Copyright c LOCKON CO.,LTD. All Rights Reserved. 16
3-2-3 プラグインファイル 構 成Sample.tar.gzSample.php (プラグインメインクラス) [ 必 須 ]<strong>plugin</strong>_info.php (プラグイン 情 報 ) [ 必 須 ]<strong>plugin</strong>_update.php (アップデートクラス)config.php ( 設 定 クラス)logo.png ( 縦 65x 横 65ピクセル)<strong>plugin</strong>_update.phpプラグインをアップデートする 場 合 は<strong>plugin</strong>_update.php::update()が 実 行 されます。以 下 の 様 に 定 義 します。config.phpclass <strong>plugin</strong>_update{/*** アップデート* updateはアップデート 時 に 実 行 されます.* 引 数 にはdtb_<strong>plugin</strong>のプラグイン 情 報 が 渡 されます.** @param array $arrPlugin プラグイン 情 報 の 連 想 配 列 (dtb_<strong>plugin</strong>)* @return void*/function update($arrPlugin) {// nop}}config.php はプラグインに 設 定 画 面 が 必 要 な 場 合 に 作 成 します。プラグイン 管 理 画 面 はプラグインディレクトリにconfig.phpがある 場 合 、「 設 定 」リンクを 表 示 します。設 定 リンクを 押 下 するとconfig.phpが 実 行 されます。logo.pngプラグインにロゴがある 場 合 はlogo.pngをインストール 時 にhtml/<strong>plugin</strong>/プラグインディレクトリ 以 下 に 保 存 して 下 さい。Copyright c LOCKON CO.,LTD. All Rights Reserved. 17
3-3 アーカイブ 作 成 方 法プラグインファイルのアーカイブ 作 成 方 法・プラグインの 圧 縮 形 式 は tar.gz を 推 奨 とします。(tar 形 式 でもインストールは 可 能 です。)* 圧 縮 する 際 に フォルダごと 圧 縮 しない 様 にご 注 意 下 さい!!## PluginDir というプラグインを 開 発 した 場 合$ ls -al PluginDirdrwxr-xr-x 9 user staff 306 5 17 16:00 .drwx------+ 39 user staff 1326 5 23 19:33 ..-rw-r--r-- 1 user staff 8955 5 18 00:32 PluginDir.php-rw-r--r-- 1 user staff 3359 5 18 00:03 logo.png-rw-r--r-- 1 user staff 618 5 18 00:03 <strong>plugin</strong>_info.php-rw-r--r-- 1 user staff 1280 5 18 00:03 <strong>plugin</strong>_update.php## プラグイン 内 のディレクトリへ 移 動 し, tar コマンドでアーカイブ 作 成$ cd PluginDir$ tar cvzf ../PluginDir.tar.gz *## ディレクトリを 含 めない 形 で 作 成 可 能$ tar tzvf PluginDir.tar.gz-rw-r--r-- 0 user staff 8955 5 18 00:32 PluginDir.php-rw-r--r-- 0 user staff 3359 5 18 00:03 logo.png-rw-r--r-- 0 user staff 618 5 18 00:03 <strong>plugin</strong>_info.php-rw-r--r-- 0 user staff 1280 5 18 00:03 <strong>plugin</strong>_update.phpCopyright c LOCKON CO.,LTD. All Rights Reserved. 18
3-3 アーカイブ 作 成 方 法Windows 環 境 でのアーカイブ 作 成 方 法圧 縮 ツール:Lhaplus 1.58フォルダ 内 のファイルを 選択 し、 圧 縮 するCopyright c LOCKON CO.,LTD. All Rights Reserved. 19
3-4 本 体 ディレクトリ 構 成data class helperSC_Helper_Plugin.php (プラグインエンジンクラス)SC_Helper_Transform (テンプレートを 変 形 するヘルパークラス)<strong>plugin</strong>SC_Plugin_Util.php (プラグイン 用 ユーティリティクラス)SC_Plugin_Base.php (プラグインの 基 底 クラス)downloads<strong>plugin</strong>各 プラグインディレクトリtmp<strong>plugin</strong>_install (プラグインインストール 時 のファイル 展 開 用 の 一 時 ディレクトリ)<strong>plugin</strong>_update (プラグインアップデート 時 のファイル 展 開 用 の 一 時 ディレクトリ)html<strong>plugin</strong>【 各 プラグインhtmlディレクトリ】uploadtemp_<strong>plugin</strong>(プラグインファイルの 一 時 ディレクトリ)プラグインインストール 後 のディレクトリ全 てdata/downloads/<strong>plugin</strong> 以 下 にプラグインコード 名 のディレクトリを 作 成 し、それ 以 下 に 展 開 されます。html 以 下 のプラグイン 用 ディレクトリインストール 時 にhtml/<strong>plugin</strong>/ 以 下 にも 同 様 にプラグインコード 名 でディレクトリが 作 成 されます。このディレクトリはjs、cssなどプラグインの 必 要 に 応 じて 使 用 します。- logo.pngをこのディレクトリに 配 置 する 事 でプラグイン 管 理 画 面 でロゴが 自 動 的 に 表 示 されます。- config.phpをこのディレクトリに 配 置 する 事 でプラグイン 管 理 画 面 で 設 定 のリンクがアクティブになります。logo.pngconfig.phpCopyright c LOCKON CO.,LTD. All Rights Reserved. 20
3-5 命 名 規 約フックポイントフックポイントを 追 加 する 際 は、 以 下 の 命 名 規 約 に 沿 って 設 置 する 事 。クラス 名 _ 関 数 名 _ 場 所Ex)フックポイント 名LC_Page_Guide_action_beginプラグインコード (プラグインコードについてはプラグインファイル 構 成 を 参 照 )プラグインコードはキャメルケースでの 命 名 とする。Ex)プラグインコードSamplePluginファイル・ファイル 名 の 先 頭 には, プラグイン 用 識 別 子 (plg)・プラグインコード(PLUGIN_CODE)を 付 与 する 事 。・ 追 加 するファイル 名 は、 原 則 EC-CUBE 標 準 規 約 に 従 う 事 。Ex)plg_SamplePlugin_hoge.tplplg_SamplePlugin_hoge.phpplg_SamplePlugin_LC_Page_Hoge.phpplg_SamplePlugin_hoge.cssplg_SamplePlugin_hoge.js…etcデータテーブル 名 ・ カラム 名 ・ メンバ 変 数 といった 本 体 にデータを 生 成 する 際 はファイル 名 と 同 様 にプラグインコードから 開 始 する 事 とする。Ex) テーブルを 追 加 する 場 合CREATE TABLE plg_SamplePlugin_holiday (hoge_id int NOT NULL,hoge_title text NOT NULL,create_date timestamp NOT NULL DEFAULTCURRENT_TIMESTAMP,update_date timestamp NOT NULL,PRIMARY KEY (holiday_id));Ex) 本 体 側 のインスタンス 変 数 をセットする 場 合$objPage-> plg_SamplePlugin_hoge=“test”;Copyright c LOCKON CO.,LTD. All Rights Reserved. 21
3-6-1 ライセンスの 指 定 方 法前 提 条 件( 参 照 :3-3 本 体 ディレクトリ 構 成 )ライセンスの 指 定 をする 前 提 として、プラグインが 以 下 の 条 件 を 満 たす 形 で 作 成 してください。以 下 条 件 にのっとらない 場 合 はプラグインのライセンスが 自 動 的 にGPLライセンスになります。プラグインがGPLライセンスになった 場 合 は、 商 用 ライセンス 購 入 サイトにてプラグインが 適 用 できなくなりますのでご 注意 ください。(EC-CUBE 本 体 を 商 用 ライセンスではなく、GPLライセンスとしてご 使 用 する 場 合 は 問 題 なくご 使 用 いただけます。)プラグインにてLGPLライセンスやその 他 GPLライセンス 以 外 のライセンスを 適 用 できる 条 件以 下 2 点 の 条 件 のものはGPLライセンスを 適 用 する 必 要 はなく、 自 由 にライセンスの 設 定 が 可 能 です。・data/downloads/<strong>plugin</strong>/ 内 に 配 置 されたもの・data/downloads/<strong>plugin</strong>/ 内 に 配 置 されたプログラムがコピー、 生 成 、 修 正 したものただし 適 用 除 外 プラグイン 又 は 適 用 除 外 プラグインと 連 携 又 は 関 連 して 動 作 するプログラムがEC-CUBEのソースコード・バイナリコードを 改 変 ( 変 更 ・ 上 書 き・ 削 除 を 含 む。 以 下 同 じ。)しないこと 及 び 改 変 したものを 包 含 ・コピー・ 生 成 ・ 転 送 しないことを条 件 とします。Copyright c LOCKON CO.,LTD. All Rights Reserved. 22
3-6-2 ライセンスの 指 定 方 法本 項 では、 例 として、LGPLライセンスをプラグインに 適 応 する 方 法 ( 推 奨 )を 記 載 します。ご 参 照 いただき、その 他 ライセンスを 指 定 する 場 合 は 独 自 に 指 定 いただきますようお 願 いいたします。1<strong>plugin</strong>_info.php (プラグイン 情 報 ) の 宣 言 にてライセンスを 指 定 します。( 参 照 :3-2-2 プラグインファイル 構 成 )以 下 、LGPLライセンスの 例class <strong>plugin</strong>_info {static $PLUGIN_CODE = "SampleClassHook";static $PLUGIN_NAME = "SCクラス フックサンプル";static $PLUGIN_VERSION = "0.1";static $COMPLIANT_VERSION = "2.12.0";static $AUTHOR = “ 株 式 会 社 ロックオン";static $DESCRIPTION = "SC 系 クラスをフックするサンプルです。";static $PLUGIN_SITE_URL = "http://www.ec-cube.net/";static $AUTHOR_SITE_URL = "http:// www.ec-cube.net /";static $CLASS_NAME = "SampleClassHook";static $HOOK_POINTS = array(}array("LC_Page_Admin_Products_Category_action_after", 'setLogoParameter'),array("LC_Page_Products_List_action_after", 'replaceLogo'));static $LICENSE = "LGPL";Copyright c LOCKON CO.,LTD. All Rights Reserved. 23
3-6-3 ライセンスの 指 定 方 法2 各 、PHPファイルのヘッダ 部 分 にてライセンスを 表 記 します。以 下 、LGPLライセンスの 場 合
3-6-4 ライセンスの 指 定 方 法3 各 、テンプレートファイルのヘッダ 部 分 にてライセンスを 表 記 します。以 下 、LGPLライセンスの 場 合詳 細 なソースをご 覧 になりたい 場 合 は、サンプルプラグインも 併 せてご 参 照 ください。・カテゴリコンテンツhttp://svn.ec-cube.net/open_trac/attachment/ticket/1692/CategoryContents.tar.gz・パンくずhttp://svn.ec-cube.net/open_trac/attachment/ticket/1692/TopicPath.tar.gzCopyright c LOCKON CO.,LTD. All Rights Reserved. 25
3-7 スーパーフックポイントEC-CUBELC_PageInit()スーパーフックポイントEx)LC_Page_Aboutsaction()ローカルフックポイント・すべてのページに 処 理 を 介 入 させる 事 が 出 来 ます。・ 全 てのページクラスで 実 行 されるフックポイントです。・プラグインメインクラスに 関 数 (preProcess, process)を 定 義 する 事 で 実 行 されます。・LC_Page、LC_Page_AdminのpreProcess, process 通 過 時 に 実 行 されます。function preProcess (LC_Page_EX objPage) {//この 関 数 をプラグイン 内 に 定 義 するだけで 実 行 されます。}下 記 の 関 数 を 定 義 する 事 で、すべてのページの 最 初 と 最 後 にそれぞれプラグインに 処 理 が 渡 ります。引 数 には 呼 び 出 し 元 クラスのインスタンスが 渡 されます。ローカルフックポイント}function process (LC_Page_EX objPage) {//この 関 数 をプラグイン 内 に 定 義 するだけで 実 行 されます。SamplePlugin.phpローカルフックポイントsendResponse()スーパーフックポイントPLUGIN Afunction process()PLUGIN Bfunction process()Copyright c LOCKON CO.,LTD. All Rights Reserved. 26
3-7 スーパーフックポイントスーパーフックポイントをフックする・ 全 ページで 実 行 したい 処 理 はスーパーフックポイントを 使 います。・スーパーフックポイントは 命 名 規 則 に 沿 った 関 数 を 定 義 にするだけで 実 行 されます。フックポイント 名LC_Page_preProcess・LC_Page_process(フックポイントを 使 う 必 要 はありません)パラメータLC_Page_EXフックしたPageクラスのインスタンス・スーパーフックポイントはLC_Page, LC_Page_Adminによって 呼 び 出 されます。・ 全 ページクラスのactionが 実 行 される 前 (init)・ 実 行 された 後 (sendResponse)に 実 行 されます。*ブロッククラスでは 実 行 されませんfunction preProcess (LC_Page_EX objPage) {//この 関 数 をプラグイン 内 に 定 義 するだけで 実 行 されます。}------------------------------------------------------------------------------------------------------------------function process (LC_Page_EX objPage) {//この 関 数 をプラグイン 内 に 定 義 するだけで 実 行 されます。}Copyright c LOCKON CO.,LTD. All Rights Reserved. 27
3-8 ローカルフックポイントEC-CUBELC_PageInit()スーパーフックポイントローカルフックポイントLC_Page_Aboutsaction()・ 特 定 のページに 処 理 を 介 入 させる 事 が 出 来 ます。・ 特 定 ページの 特 定 箇 所 で 呼 び 出 されるフックポイントです。・ローカルフックポイントの 定 義 方 法 は2つあります。1<strong>plugin</strong>_info.phpに 定 義 する。1-1: <strong>plugin</strong>_info.php :static $HOOK_POINTSを 宣 言 し、フックポイントとコールバック 関 数 を 定 義 します。class <strong>plugin</strong>_info {~ 省 略 ~static $HOOK_POINTS = array(array(" LC_Page_Admin_Products_category_action_end", 'contents_set '),}ローカルフックポイントを 指 定コールバック 関 数 を 指 定----------------------------------------------------------------------------------------------// フックポイント 通 過 時 に 実 行 されるコールバック 関 数function contents_set (LC_Page_EX objPage) {}ローカルフックポイントsendResponse()スーパーフックポイント1-2:インストール 時 に 定 義 に 従 ってdtb_<strong>plugin</strong>_hookpointに 登 録 されます。1-3: フックポイント 通 過 時 にDBに 登 録 しているフックポイントに 応 じてコールバック 関 数 が 実 行 されます* <strong>plugin</strong>_info.phpに 定 義 したフックポイント 以 外 に 追 加 したい 場 合 はregister 関 数 を 作 成 します。その 場 合 、 以 下 の 様 に 明 示 的 に 呼 び 出 す 必 要 があります。(registerについては 後 述 )function register($objHelperPlugin, $priority)) {parent::register($objHelperPlugin, $priority);$objHelperPlugin->addAction(‘LC_Page_Admin_Products_action_after', array($this, 'contents_set'));}。Copyright c LOCKON CO.,LTD. All Rights Reserved. 28
3-8 ローカルフックポイントEC-CUBELC_PageInit()スーパーフックポイントローカルフックポイントLC_Page_Aboutsaction()・ 特 定 のページに 処 理 を 介 入 させる 事 が 出 来 ます。・ 特 定 ページの 特 定 箇 所 で 呼 び 出 されるフックポイントです。・ローカルフックポイントの 定 義 方 法 は2つあります。2 SC_Helper_Pluginの 関 数 addActionでセットする。1-1:プラグインメインクラスにregister() 関 数 を 定 義 し、フックポイントとコールバック 関 数 をセットします。function register(SC_Helper_Plugin $objHelperPlugin) {$objHelperPlugin->addAction('prefilterTransform', array(&$this, 'prefilterTransform'));}1-2: フックポイント 通 過 時 に 指 定 のコールバック 関 数 が 実 行 されます。ローカルフックポイントを 指 定// フックポイント 通 過 時 に 実 行 されるコールバック 関 数function prefilterTransform (LC_Page_EX objPage) {}コールバック 関 数 を 指 定ローカルフックポイントsendResponse()スーパーフックポイントCopyright c LOCKON CO.,LTD. All Rights Reserved. 29
3-8 ローカルフックポイントローカルフックポイントをフックする・ 各 ページ 処 理 にプラグインで 処 理 を 介 入 する 場 合 はローカルフックポイントを 使 います。・フックポイント 名 は 実 行 されるページ・タイミングによって 自 動 的 に 生 成 されます。フックポイント 名クラス 名 _アクション_モードパラメータLC_Page_EXフックしたPageクラスのインスタンス・ローカルフックポイントはLC_Page, SC_Responseによって 動 的 に 生 成 されます。・ 各 ページクラスのaction() 関 数 実 行 前 ・ 実 行 後 されます。クラス 名タイミングLC_Page_Admin_Contents_action_begin (or after)・action() 関 数 途 中 にSC_Response_Ex::actionExit()やSC_Response_Ex::reload()で 処 理 を 抜 ける 場 合 は以 下 のルールでフックポイントが 生 成 されます。クラス 名モード 名LC_Page_Admin_Contents_action_deletestatic $HOOK_POINTS = array(array("LC_Page_Admin_Products_category_action_end", ‘contents_set'));------------------------------------------------------------------------------------------------------------------// フックポイント 通 過 時 に 実 行 されるコールバック 関 数function contents_set (LC_Page_EX objPage) {}Copyright c LOCKON CO.,LTD. All Rights Reserved. 30
3-9 SC_FormParamのフックSC_FormParamをフックする・プラグインでフォームに 項 目 追 加 した 場 合 、エラーチェックを 入 れたい 場 合 があります。SC_FormParamにフックする 事 でパラメータの 追 加 が 簡 単 に 出 来 るので、プラグイン 側 で 入 力 バリデータを 作 成 する 必 要 がありません。フックポイント 名SC_FormParam_constructパラメータStringSC_FormParamSC_FormParam 呼 び 出 し 元 のクラス 名SC_FormParamのインスタンス・SC_FormParamのSC_FormParam ::__construct()にフックする 事 が 出 来 ます。・SC_FormParamのコンストラクタ 生 成 時 にフック 出 来 るので$objFormParamへのパラメータ 追 加 が 容 易 になります。static $HOOK_POINTS = array(array(" SC_FormParam_construct ", ‘addParam'));------------------------------------------------------------------------------------------------------------------function addParam($calss_name, $param) {if (strpos($calss_name, 'LC_Page_Entry') !== false) {$param->addParam(' 追 加 パラメータ', 'plg_param', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_COUNT_CHECK', 'NUM_CHECK'));}}Copyright c LOCKON CO.,LTD. All Rights Reserved. 31
3-10 SC_ 系 クラスのフックSC_ 系 のクラスをフックする・ SC_ 系 のクラスをプラグイン 側 で 置 き 換 える 事 が 出 来 ます。SC_ 系 クラスをプラグイン 側 で 自 由 にカスタマイズしたい 場 合 はこのフックポイントを 使 用 します。* 他 プラグインと 競 合 する 可 能 が 高 くなり、 正 常 に 動 作 しなくなる 可 能 性 があります。フックポイント 名loadClassFileChangeパラメータStringString読 み 込 む 事 を 要 求 されたクラスの 名 前本 来 読 み 込 む 予 定 であるクラスファイルのパス・PHPのオートロード 機 能 に 介 入 し、ロードするクラスを 別 クラスに 変 更 する 事 が 出 来 ます。static $HOOK_POINTS = array(array("loadClassFileChange", ‘loadClassFileChange'));------------------------------------------------------------------------------------------------------------------function loadClassFileChange (&$classname, &$classpath) {if($classname == 'SC_Customer_Ex') { // 変 えたいクラス 名 でフィルタ,*_Exにフィルタ 推 奨// 代 替 読 み 込 みされるクラスファイルを 用 意$classpath = PLUGIN_UPLOAD_REALDIR . "CategoryContents/SC_MyCustomer.php";}}// 上 で 指 定 した 代 替 読 み 込 みされるファイル 内 のクラス 名 が、 本 来 の 読 み 込 み 先 と 違 うクラス 名 の 場 合 、$classname を 変 更 するクラス 名 にする。$classname = 'SC_MyCustomer';* 注 意このコールバック 関 数 では、 特 別 な 処 理 がされますので 注 意 が 必 要 です。(1)$classname が 本 来 読 み 込 むクラスと 別 の 名 前 を 設 定 して 関 数 が 終 わった 場 合→ 自 動 的 に、 本 来 読 み 込 む 予 定 だったSC_XXXX_Exのextends を 新 しく 指 定 された$classname に 書 き 換 えます。これにより、 下 記 のようなextends 関 係 になります。SC_XXXX_Ex -> SC_XXXX の 関 係 から、 SC_XXXX_Ex -> $classname (-> SC_XXXX) と 変 える。$classname で 新 しく 指 定 されたクラスは、_ExではないSC_をextendsしていることが 推 奨 される。(2)$classname が 本 来 読 み 込 むクラスと 同 名 の 場 合新 しく 指 定 された$classpath のみが 読 み 込 まれます。_Exは 無 視 されますが、_Ex 無 視 はカスタマイズをする 人 から 分 かりにくくなるため(1)の 利 用 方 法 が 望 ましいです。Copyright c LOCKON CO.,LTD. All Rights Reserved. 32
3-11 テンプレートの 変 更テンプレートファイルテンプレートファイルの 変 更・テンプレートの 変 更 はSmartyのfilter 機 能 を 使 います。・ prefilterはコンパイルファイル 作 成 時 にのみ 実 行 されます。(プラグインインストール 時 に 全 コンパイルファイルを 削 除 します)prefilter解 析postfilterprefilter・コンパイル 時 のみ 呼 ばれます(template_c/ 以 下 にコンパイルファイルが 無 い 場 合 )・ 使 用 するにはフックポイント 同 様 にregister 関 数 に 定 義 します。$objHelperPlugin->addAction('prefilterTransform', array(&$this, 'prefilterTransform'));prefilterコールバック 関 数・コールバック 関 数 を 定 義 します。定 義 されたコールバック 関 数 には 以 下 のパラメータが 渡 されます。$source / (string)テンプレートソース$objPage / (LC_Page_Ex ) 呼 び 出 し 元 のPageオブジェクト$filename / (string)テンプレートのファイル 名コンパイルファイル変 数 割 当outputfilter出 力function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {テンプレートソースの 変 更 はSC_Helper_Transformを 使 用 します。( 後 述 )}outputfilter・テンプレート 出 力 時 に 毎 回 呼 ばれます・ 使 用 方 法 はprefilterと 同 様 です。$objHelperPlugin->addAction(‘outputfilterTransform', array(&$this, ‘outputfilterTransform'));・コールバック 関 数 を 定 義 します。outputfilterコールバック 関 数function outputfilterTransform(&$source, LC_Page_Ex $objPage, $filename) {}Copyright c LOCKON CO.,LTD. All Rights Reserved. 33
3-11 テンプレートの 変 更テンプレートをフックする(prefilterTransform)・テンプレートの 変 更 も 他 フックポイントと 同 様 にフックポイントでフックし、プラグイン 側 でデータを 加 工 します。フックポイント 名prefilterTransformstringテンプレートソースパラメータLC_Page_Exstring呼 び 出 し 元 のPageオブジェクトテンプレートのファイル 名・テンプレートのコンパイル 実 行 時 に 呼 び 出 されます。* 一 度 テンプレートのコンパイルファイルが 生 成 されると、 次 回 からは 呼 び 出 されません。・ 第 一 引 数 で 渡 るテンプレートソースに 対 して 変 更 を 加 えます。static $HOOK_POINTS = array(array("prefilterTransform", ‘prefilterTransform'));------------------------------------------------------------------------------------------------------------------function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {$objTransform = new SC_Helper_Transform($source);$template_dir = PLUGIN_UPLOAD_REALDIR . 'CategoryContents/templates/';switch($objPage->arrPageLayout['device_type_id']){case DEVICE_TYPE_MOBILE:case DEVICE_TYPE_SMARTPHONE:case DEVICE_TYPE_PC:// 商 品 一 覧 画 面if (strpos($filename, 'products/list.tpl') !== false) {$objTransform->select('h2.title')->insertBefore(file_get_contents($template_dir . 'categorycontents_products_list_add.tpl'));}break;case DEVICE_TYPE_ADMIN:default:// カテゴリ 登 録 画 面if (strpos($filename, 'products/category.tpl') !== false) {$objTransform->select('div.now_dir')->replaceElement(file_get_contents($template_dir . 'categorycontents_admin_basis_category_add.tpl'));}break;}$source = $objTransform->getHTML();}Copyright c LOCKON CO.,LTD. All Rights Reserved. 34
3-11 テンプレートの 変 更テンプレートをフックする(outputfilter_transform)・テンプレートの 変 更 も 他 フックポイントと 同 様 にフックポイントでフックし、プラグイン 側 でデータを 加 工 します。フックポイント 名outputfilter_transformstringテンプレートソースパラメータLC_Page_Exstring呼 び 出 し 元 のPageオブジェクトテンプレートのファイル 名・コンパイルファイルからHTML 形 式 に 変 換 後 、 呼 び 出 されます。* 既 にHTMLの 形 になっているのでSmartyタグを 挿 入 する 事 は 出 来 ません。*prefilterTransformと 違 い、 毎 回 実 行 される 処 理 となるので 使 い 方 によってはパフォーマンスが 低 下 します。・ 第 一 引 数 で 渡 るテンプレートソースに 対 して 変 更 を 加 えます。static $HOOK_POINTS = array(array("prefilterTransform", ‘prefilterTransform'));------------------------------------------------------------------------------------------------------------------function outputfilterTransform(&$source, LC_Page_Ex $objPage){$objTransform = new SC_Helper_Transform($source);switch($objPage->arrPageLayout['device_type_id']){case DEVICE_TYPE_MOBILE:break;case DEVICE_TYPE_SMARTPHONE:break;case DEVICE_TYPE_PC:// 商 品 詳 細 画 面if (strpos($objPage->tpl_mainpage, 'products/detail.tpl') !== false) {$objTransform->select('#header_wrap')->insertBefore('このページは' . date('Y 年 n 月 j 日 H:i:s') . 'に 表 示 更 新 されました。');}break;case DEVICE_TYPE_ADMIN:default:break;}}$source = $objTransform->getHTML();Copyright c LOCKON CO.,LTD. All Rights Reserved. 35
3-11 テンプレートの 変 更テンプレートをフックする* 注 意テンプレートの 変 更 には、 簡 単 にソースを 加 工 出 来 るSC_Helper_Transformを 推 奨 としますが、 以 下 のケースにはSC_Helper_Transformが 対 応 していません。・メールテンプレート、HTMLの 書 式 に 沿 っていないテンプレート( popup_footer .tplなど)テンプレートは 文 字 列 ですのでSC_Helper_Transformを 使 用 することなく、 好 きに 加 工 する 事 は 可 能 です。以 下 、 SC_Helper_Transformを 使 わない 例public function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) {$template_dir = PLUGIN_UPLOAD_REALDIR . $this->arrSelfInfo['<strong>plugin</strong>_code'] . '/templates/';switch($objPage->arrPageLayout['device_type_id']){case DEVICE_TYPE_MOBILE:case DEVICE_TYPE_SMARTPHONE:case DEVICE_TYPE_PC:// site_main.tplへタグを 差 し 込 むif (strpos($filename, 'site_main.tpl') !== false) {// タグテンプレートを 取 得$cm_tag = file_get_contents($template_dir . 'cm_tag.tpl');// タグテンプレートを 取 得$cv_tag = file_get_contents($template_dir . 'cv_tag.tpl');// bodyタグ 直 下 へ 挿 入$body = '';$source = str_replace($body,$body . $cm_tag . $cv_tag,$source);}break;case DEVICE_TYPE_ADMIN:default:break;}}Copyright c LOCKON CO.,LTD. All Rights Reserved. 36
3-12 ヘッダーにタグ 追 加ヘッダーにタグ 追 加 する・テンプレートのヘッダーにプラグインからタグを 追 加 したい 場 合 はいくつか 方 法 があります。•SC_Helper_Plugin::setHeadNaviを 使 う•1プラグインメインクラスのregister 関 数 で 使 う 事 が 出 来 ます。function register(SC_Helper_Plugin $objHelperPlugin) {// ヘッダへの 追 加$template_dir = PLUGIN_UPLOAD_REALDIR . 'TopicPath/templates/';$objHelperPlugin->setHeadNavi($template_dir . 'plg_topicPath_header.tpl');}2 ナビに 追 加 したテンプレート(plg_topicPath_header.tpl)で、タグを 出 したいページだけに 出 力 される 様 にします。$arrPageLayout = $this->get_template_vars('arrPageLayout');switch($arrPageLayout['device_type_id']){case 1:break;case 2:break;case 10:switch($_SERVER['PHP_SELF']){case '/products/list.php':case '/products/detail.php':echo('');break;default:}break;default:switch($_SERVER['PHP_SELF']){case '/admin/design/bloc.php':echo('');break;default:}}・ site_frameをトランスフォームする・その 他 ( 良 い 方 法 があればご 連 絡 ください)Copyright c LOCKON CO.,LTD. All Rights Reserved. 37
4.リファレンスCopyright c LOCKON CO.,LTD. All Rights Reserved. 38
4-1 SC_Helper_TransformトランスフォームSC_Helper_Transformを 使 うことで 簡 単 にテンプレートの 変 更 を 行 う 事 が 出 来 ます。select.・find・endを 使 い、テンプレートの 変 更 を 加 えたい 箇 所 を 指 定 し、 指 定 した 要 素 に 対 してhtml( 文 字 列 )を 挿 入 ・ 置 換 します。関 数 名セレクタを 用 いてエレメントを 選 択 する備 考selectfindendinsertBeforeinsertAfterappendFirstappendChildreplaceElementremoveElementセレクタの 指 定 方 法 は、タグ 名 、ID 名 、クラス 名 のみに 対 応 しています。セレクタの 併 用 は 可 能 ですが指 定 する 順 番 は、タグ 名 →ID 名 →クラス 名 の 順 となっています。セレクタを 用 いて、 選 択 したエレメント 内 をさらに 絞 り 込 む選 択 状 態 を 指 定 数 戻 す要 素 の 前 にHTMLを 挿 入要 素 の 後 にHTMLを 挿 入要 素 の 先 頭 にHTMLを 挿 入要 素 の 末 尾 にHTMLを 挿 入要 素 を 指 定 したHTMLに 置 換要 素 を 削 除 する変 更 対 象 のテンプレートのソース( 文 字 列 )を 引 数 にインスタンスを 生 成Ex)$objTransform = new SC_Helper_Transform($source);$objTransform->select('div.now_dir')->replaceElement(file_get_contents($template_dir . 'snip.admin_basis_category_add.tpl'));タグで 識 別 子 がid=“now_dir”の 要 素 をセレクト置 換 するソースを 渡 す( 文 字 列 )Copyright c LOCKON CO.,LTD. All Rights Reserved. 39
4-2 テーブル 定 義dtb_<strong>plugin</strong>:プラグイン 情 報 テーブルフィールド 名 型 長 さ NOT NULL デフォルト 値 備 考<strong>plugin</strong>_id integer 11 NOT NULL PK<strong>plugin</strong>_name text 0 NOT NULL 表 示 用 プラグイン 名<strong>plugin</strong>_code text 0 NOT NULL プラグインコード(ユニーク)class_name text 0 NOT NULL メインクラスauthor text 0 NULL 作 者 名author_site_url text 0 NULL 参 考 サイトURL( 作 者 )<strong>plugin</strong>_site_url text 0 NULL 参 考 サイトURL(プラグイン)<strong>plugin</strong>_version text 0 NULL プラグインバージョンcompliant_version text 0 NULL 対 応 バージョン<strong>plugin</strong>_description text 0 NULL 詳 細 説 明priority integer 11 NOT NULL 0 優 先 順 位 ( 高 い 方 が 優 先 )enable smallint 6 NOT NULL 0 1: 有 効 , 2: 無 効free_field1 text 0 NULL カスタムフィールドfree_field2 text 0 NULL カスタムフィールドfree_field3 text 0 NULL カスタムフィールドfree_field4 text 0 NULL カスタムフィールドcreate_date timestamp 0 NOT NULL now() 登 録 日 時update_date timestamp 0 NOT NULL now() 更 新 日 時dtb_<strong>plugin</strong>_hookpoint: 使 用 フックポイントテーブルフィールド 名 型 長 さ NOT NULL デフォルト 値 備 考<strong>plugin</strong>_hookpoint_id integer 11 NOT NULL PK<strong>plugin</strong>_id integer 11 NOT NULL プラグインIDhook_point text 0 NOT NULL 使 用 するフックポイントcallback text 0 フックポイントで 実 行 されるコールバック 関 数create_date timestamp 0 NOT NULL now() 登 録 日 時update_date timestamp 0 NOT NULL now() 更 新 日 時Copyright c LOCKON CO.,LTD. All Rights Reserved. 40
4-3 定 数 一 覧定 数 一 覧定 数 名 値 備 考PLUGIN_UPLOAD_REALDIR DATA_REALDIR . "downloads/<strong>plugin</strong>/" インストールされた プラグインの 保 存 ディレクトリPLUGIN_HTML_REALDIR HTML_REALDIR . "<strong>plugin</strong>/" インストールされた プラグインのhtmlディレクトリPLUGIN_TEMP_REALDIR HTML_REALDIR . "upload/temp_<strong>plugin</strong>/" プラグインファイル 一 時 保 存 先PLUGIN_EXTENSION tar,tar.gz プラグインファイル 登 録 可 能 拡 張 子DOWNLOADS_TEMP_PLUGIN_UPDATE_DIR DATA_REALDIR . "downloads/tmp/<strong>plugin</strong>_update/" プラグイン 一 時 展 開 用 ディレクトリ(アップデート 用 )DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR DATA_REALDIR . "downloads/tmp/<strong>plugin</strong>_install/" プラグイン 一 時 展 開 用 ディレクトリ(インストール 用 )PLUGIN_HTML_URLPATH ROOT_URLPATH . "<strong>plugin</strong>/" プラグインURLHOOK_POINT_PREPROCESS LC_Page_preProcess スーパーフックポイント(プレプロセス)HOOK_POINT_PROCESS LC_Page_process スーパーフックポイント(プロセス)SMARTY_FORCE_COMPILE_MODE false SMARTYコンパイルモードPLUGIN_ACTIVATE_FLAG true プラグインのロード 可 否 フラグ*SMARTY_FORCE_COMPILE_MODEをtrueにする 事 で 、template_c 以 下 のコンパイルファイル 生 成 が 毎 回 実 行 されます。 開 発 時 にお 使 い 下 さい* PLUGIN_ACTIVATE_FLAGをfalseにする 事 で 全 プラグインが 実 行 されなくなります。Copyright c LOCKON CO.,LTD. All Rights Reserved. 41