EC-CUBE:フックポイントを増やすことはできるのか?

EC-CUBEでは、プラグイン開発時に独自に割り込み処理を行うための「フックポイント」のしくみが提供されていますが、定義されていないけども「このタイミングでも処理を割りこませたい!=フックポイントを作りたい」と思うことがあるのではないでしょうか?

ページごとのフックポイントはローカルフックポイントを呼び出す

独自にページを作ったり、プラグイン用の特殊なページ(目には見えないけども、外部と通信するためのAPIページやAjax通信を行うためのページ)が動作するタイミングのフックポイントを利用するには、ローカルフックポイントを利用します。

ローカルフックポイントで代表的なものとして「ページクラス名+”_action_before”」というものと「ページクラス名+”_action_after”」というものがあります。

LC_Page_Hogeクラスのローカルフックポイントが呼ばれる仕組み

これらのローカルフックポイントがどこで作られて呼ばれているのかというと、あらゆるページの基底クラスである「LC_Page」クラス内のinit()メソッドと、sendResponse()メソッドです。

例えば、EC-CUBE内に誰かが作った「LC_Page_Hoge」クラスがあったとしましょう。 このページが利用される際に割り込ませたい処理がある場合、次のローカルフックポイントが利用できます。

ローカルフックポイント名 タイミング
LC_Page_Hoge_action_before init();
LC_Page_Hoge_action_after sendResponse();

これらのフックポイントを独自のプラグインで使いたい場合は、例えばプラグイン・コアクラス内のregisterメソッドで以下のように記述します。

function register(SC_Helper_Plugin $objHelperPlugin, $priority) {
....(中略)....
$objHelperPlugin->addAction('LC_Page_Hoge_action_before', array(&$this, 'hogeActionBefore'));
}
function hogeActionBefore(LC_Page_Ex $objPage) {
(独自の割り込み処理)
}

利用される側は便利な仕組みの構築を心がけよう

以上を踏まえると、なるべくページクラスの役割を明確にして、外部から利用できるような構造にしておくことを心がけましょう。

まとめると、自分で作るオリジナルのページクラスは、継承元クラスのinit()メソッドやsendResponse()メソッドをちゃんと「parent::init()」「parent::sendResponse()」で呼ぶようにしておいてください。 そうしないとローカルフックポイントが呼ばれないよ、ということです。

この仕組みを理解すると、プラグイン同士の連携処理をゆるい繋がり(疎結合)で実現させることができるので非常に便利です。(フックポイントを利用する側からすれば依存関係ができてしまいますが)

お役に立てば幸いです。 それではまた!

このページをシェアする

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

2013-06-10