12.07.2015 Views

plugin

plugin

plugin

SHOW MORE
SHOW LESS

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

Hooray! Your file is uploaded and ready to be published.

Saved successfully!

Ooh no, something went wrong!