Fatal Error: Unexpected BLOG

主に自分用の備忘録として

【EC-CUBE】$arrProductに情報を追加する

テンプレートファイル内で{$arrProduct}経由でアクセスできる情報を追加する方法です。
(※ver2.13.2で検証済みです。他のバージョンでは未検証です。開発・実装は自己責任で。)
クラスを編集するので、EC-CUBEのアップデートの際には注意が必要です。

 

data/class/SC_Product.php

任意の位置にメソッドを定義します。
リスト取得時用と、詳細取得時用の二つ必要。

    public static function newFunctionToProducts(&$arrProducts) {
        
        /* リスト取得時用 */
        foreach ($arrProducts as &$arrProduct) {
            
            /* 詳細取得時用のメソッドを$arrProduct毎に呼び出す */
            SC_Product_Ex::newFunctionToProduct($arrProduct);
            
        }
    }
    
    public static function newFunctionToProduct(&$arrProduct) {
        /* 詳細取得時用 */
        /* 追加したい情報を取得・生成して、$arrProductへマージする */
        
        ...some code...
        
        $newArray = array(
            'new_data' => $new_data_value
        );
        
        $arrProduct = array_merge($arrProduct, $newArray);
    }

既存のメソッドに、新しく作成したメソッドの呼び出しを追加。

    /* リスト取得時に呼ばれるメソッド。167行目あたり。 */
    public function getListByProductIds (&$objQuery, $arrProductId = array()) {
        
        ...
        
        SC_Product_Ex::newFunctionToProducts($arrProdcuts);
        
        return $arrProducts;
    }
    /* 詳細取得時に呼ばれるメソッド。getListByProductIds()のすぐ後。 */
    public function getDetail($productId) {
        
        ...
        
        SC_Product_Ex::newFunctionToProduct($arrProduct);
        
        return $arrProduct;
    }

これでSmartyの{$arrProduct}に要素が追加される。

data/Smarty/templates/default/products/list.tpl
data/Smarty/templates/default/products/detal.tpl

    <!--{$arrProduct.new_data}-->

上記のテンプレート以外でも、{$arrProduct}がアサインされていればアクセスできます。

メソッドの引数で参照渡しになっている部分かならず参照渡しにして下さい。
値渡しだと動きません。