[EC-CUBE tips]viewに渡したはずの値が表示されない?―page_extends/frontpartsの存在

[EC-CUBE tips]viewに渡したはずの値が表示されない?―page_extends/frontpartsの存在

イメージ

こんにちは、やっとこさおひな様を出したinoueです。一週間限定公開!

さて。EC-CUBEで独自GETパラメータを追加して商品検索を行おうとした際に(ムダに)ハマってしまった話をしたいと思います。
今思えばメインで利用しているCakePHPに対する感覚が邪魔をしたともいえるお話なのですが…。

やりたいことは、下の図のような仕様です:

20110228_inoue_01.png

最初の実装

まずはコントローラのカスタマイズから。
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!と表示を確認すると、結果は…メインにしかサイズが表示されていませんでした。なぜ?

20110228_inoue_02.png

足りなかったもの

$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

これでやっと期待する表示が実現できました!

20110228_inoue_03.png

メイン部分で値渡していればサイドなどには渡るだろう、というのは大間違い、というのが今回の教訓。 使っているフレームワークの構造を冷静に確認しないといけないですね。
みなさんも気を付けてくださいね!

  • このエントリーをはてなブックマークに追加

この記事を読んだ人にオススメ