EC-CUBE:オリジナルページでページレイアウト処理を無視したい
この記事はEC-CUBE:Ajax処理等で通常ページ出力をしたくない場合は?と合わせて読んでいただくとさらに役に立つと思います。
EC-CUBEでは、管理画面でページテンプレートを作成すると、ヘッダーやフッター、メニュー等を自由に配置してレイアウト情報を作成できますが、逆にこのような処理をスキップしたい場合もありますよね。
たとえばAjax的な処理であるとか、HTMLではない情報を返したりとか。 オリジナルでプラグインを作成する場合にも独自ページなんかはこういったページレイアウト処理を省きたいものです。
しかし、通常は強引にシステムが「テンプレート、あるんでしょ?」というような処理を行うため、管理画面でテンプレートを用意していないと次のような警告(Warning)を吐かれてしまいます。
- Warning(E_USER_WARNING): ページ情報を取得できませんでした。…
- Warning(E_USER_WARNING): メイン部のテンプレートが存在しません。…
どこでページレイアウト情報が組み込まれているのか?
このページレイアウト処理が行われているのは「LC_Page::init()」の以下の部分。
if (!$this->skip_load_page_layout) { $layout = new SC_Helper_PageLayout_Ex(); $layout->sfGetPageLayout($this, false, $_SERVER['SCRIPT_NAME'], $this->objDisplay->detectDevice()); }
skip_load_page_layoutプロパティ
よく見ると分岐がありますね。 そう、これがページレイアウトを無視できるプロパティ「skip_load_page_layout」です。 これを自作のページクラスのinit()中にtrueで設定すればOKです。
class myOriginalPageClass extends LC_Page_Ex { function init() { $this->skip_load_page_layout = true; ...(その他の独自処理)... parent::init(); } ...(以下略)... }
parent::init()の中で処理が行われるので、skip_load_page_layout を true にする前に呼び出さないように注意してくださいね。
2013-10-23