[EC-CUBE tips]viewに渡したはずの値が表示されない?―page_extends/frontpartsの存在
こんにちは、やっとこさおひな様を出したinoueです。一週間限定公開!
さて。EC-CUBEで独自GETパラメータを追加して商品検索を行おうとした際に(ムダに)ハマってしまった話をしたいと思います。
今思えばメインで利用しているCakePHPに対する感覚が邪魔をしたともいえるお話なのですが…。
やりたいことは、下の図のような仕様です:
最初の実装
まずはコントローラのカスタマイズから。
data/class_extends/page_extends/products/LC_Page_Products_List_Ex.php
に次のようにsizeプロパティを定義することでビューに取得したsizeパラメータを渡すことができます。
class LC_Page_Products_List_Ex extends LC_Page_Products_List {
//サイズ検索用のパラメータ
var $size
:
:
/**
* Page のプロセス.
*
* @return void
*/
function process() {
//サイズ検索用のパラメータの取得
if (isset($_GET['size']) {
$this->size = $_GET['size'];
//サイズ検索の処理など(以下、略)
}
parent::process();
}
:
:
というのも、この LC_Page_Products_List_Ex の継承元の LC_Page_Products_List のprocessメソッド にて 次のような処理があるため、クラスのメソッドとして定義してあれば、その値はビューへと引き継がれることになります。
$objView->assignobj($this);
$objView->display(SITE_FRAME);
次にビューのカスタマイズ。 data/Smarty/templates/default/list.php(一覧ページのメイン部) と data/Smarty/templates/default/bloc/category.php(サイドのカテゴリー表示パーツ)に次のSmartyタグを挿入します。
<!--{$size}-->サイズの商品
ここまででカスタマイズOK!と表示を確認すると、結果は…メインにしかサイズが表示されていませんでした。なぜ?
足りなかったもの
$sizeをはじめ様々な値を追跡しても、そちらには問題なし。
あらためて、どのように表示が行われているかを確認していて、
data/class_extends/page_extends/frontparts/bloc/LC_Page_FrontParts_Bloc_Category_Ex.php
というファイル(コントローラ)の存在に気づきました。
渡したつもりになっていましたが、サイドのビューには$sizeが渡っていなかったんですね。
ということで、気を取り直して、ここにもプロパティを追加。
class LC_Page_FrontParts_Bloc_Category_Ex extends LC_Page_FrontParts_Bloc_Category {
//サイズ検索用のパラメータ
var $size
これでやっと期待する表示が実現できました!
メイン部分で値渡していればサイドなどには渡るだろう、というのは大間違い、というのが今回の教訓。
使っているフレームワークの構造を冷静に確認しないといけないですね。
みなさんも気を付けてくださいね!