EC-CUBEプラグインの基本的な機能についてということで、今回は前回の宣言どおり、テンプレートのフックについて、説明できればと思います。
テンプレートのフックをテンプレートの表示をフックして書き換える処理になります。
(呼び方的にはフックというよりもTransformかな?)
フックポイントを設定するので、基本的にはページのフックと同じ様な登録方法になります。
function register(SC_Helper_Plugin $objHelperPlugin) { $objHelperPlugin->addAction('LC_Page_Abouts_action_after', array($this, 'abouts_after')); $objHelperPlugin->addAction('prefilterTransform', array(&$this, 'prefilterTransform')); }
ページのフックと、テンプレートのフックを並べるとこんな感じです。
基本的には「SC_Helper_Plugin」の「addAction」で登録してやるかたちで、同じです。
ただ、「クラス名+_action+処理タイミング」の形で指定していた「引数1」の部分が、固定値で、「prefilterTransform」になります。
また、コールバック処理の名称も同様に「prefilterTransform」になります。
そして、コールバックの処理の引数も、ページ処理のフックの際とは異なります。
テンプレートのフックの場合は、
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) { }
この様な形式になります。
上記は、一部抜粋した状態ですが、使う際はこのような形を基本形として利用することになるかと思います。
function prefilterTransform(&$source, LC_Page_Ex $objPage, $filename) { $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: break; case DEVICE_TYPE_ADMIN: default: break; } $source = $objTransform->getHTML(); }
順に説明すると、まず2行目はテンプレートのソースを取得しております。
次に、switch文の部分ですが、これはデバイスを判定しており、このデバイスの判定により、どのデバイスのテンプレートを、書き換えるかを分けれるようになっております。
テンプレートの書き換えを行う場合、デバイスの種類に関係なく、どのデバイスに対しても表示を変更する必要があるので、「分岐させる必要はないのでは?」と思われるかもしれませんが、デバイスごとにテンプレートを持っており、表示の仕方も三者三様ですので、デバイスを判定し書き換える上記の形が扱いやすいかと思います。
どの様に分かれているかは、見ればわかるかもしれませんが下記のようになっております。
DEVICE_TYPE_MOBILE = モバイル端末でアクセスされた際
DEVICE_TYPE_SMARTPHONE = スマートフォンでアクセスされた際
DEVICE_TYPE_PC = PCでアクセスされた際
最後の部分は、「DEVICE_TYPE_ADMIN」と「default」にしておりますが、ここは管理画面へのアクセスとブロック系の表示となります。
実際どの様にしてテンプレートの書き換えを行うかは、さらに次回「EC-CUBEプラグインの基本的な機能 その4」でまとめたいと思います。
0 件のコメント:
コメントを投稿