EC-CUBEの商品一覧をTOPページに表示する方法

EC-CUBE APIの話はちょっとお休みして、今回はEC-CUBEのバッドノウハウをw

EC-CUBEの商品一覧をTOPページ(というか、商品一覧ページ以外)に表示させたい場合が あるわけですが、その場合の一番何も考えないやり方としては、

  1. data/class/pages/products/LC_Page_Products_List.php の内容を data/class_extends/page_extends/LC_Page_Index_Ex.php にコピー (クラス名等は適宜調整するとして)
  2. data/Smarty/templates/default/products/list.tpl を data/Smarty/templates/default/index.tpl にコピーして、カスタマイズ

となるかと思うのですが、それではあまりに何も考えてなさ過ぎるというか、 LC_Page_Products_List と LC_Page_Index_Ex で同じコードを持ってたら メンテナンスがめんどくさいよねと思って、 もう少しだけマシなやり方を考えてみました。

具体的手順

まず、商品一覧を得るために必要な処理は LC_Page_Products_List_Ex にあるので、 LC_Page_Index_Ex の中にLC_Page_Products_List_Ex のオブジェクトを作り、 LC_Page_Products_List_Ex::init() と LC_Page_Products_List_Ex::action() を呼び出します。

次に、LC_Page_Products_List_Ex のプロパティを Smarty のテンプレート変数にするため、 LC_Page_Products_List_Ex の全プロパティを LC_Page_Index_Ex のプロパティに コピーします。

コード

具体的には、data/class_extends/page_extends/LC_Page_Index_Ex.php に action() メソッドを追加して、以下のようなコードを書きます。

function action() {
    parent::action();

    /* LC_Page_Products_List_Ex のオブジェクトを作成、処理を実行 */
    $productsList = new LC_Page_Products_List_Ex();
    $productsList->init();
    $productsList->action();

    /* LC_Page_Products_List_Ex のプロパティをコピー */
    foreach ($productsList as $key => $val) {
        $this->$key = $val;
    }
}

あとは data/Smarty/templates/default/products/list.tpl を data/Smarty/templates/default/index.tpl にコピーして、 必要なカスタマイズをすればオッケーです。

category_idで絞り込みを行ないたい時は

$productsList->action() を実行する前に $_REQUEST に category_id=… という パラメータをセットしてあげるのが手っ取り早いです。

function action() {
    parent::action();

    $savedRequest = $_REQUEST; // 元の $_REQUEST を保存

    /* LC_Page_Products_List_Ex のオブジェクトを作成、処理を実行 */
    $productsList = new LC_Page_Products_List_Ex();

    $_REQUEST = array('category_id' => 4); // category_id をセット
    $productsList->init();
    $productsList->action();

    $_REQUEST = $savedRequest; // 必要であれば元の $_REQUEST を戻す

    /* LC_Page_Products_List_Ex のプロパティをコピー */
    foreach ($productsList as $key => $val) {
        $this->$key = $val;
    }
}
スポンサーリンク
スポンサーリンク:

フォローする