[EC-CUBE 2.11.2] 商品一覧に定価と○○%OFFを表示したい

これも結構使うカスタマイズだと思いますが、2.11ではやったことなかったので、やってみました。
割引率計算はSmartyでやってもいいんだけど、今回はPHP側で取得してみました。

1.data/class/pages/products/LC_Page_Products_List.php の 138行目付近に以下のコードを挿入

// 商品一覧データに割引率を追加
foreach($this->arrProducts as $key => $this->arrProduct){
    // 商品一覧データに割引率を追加
    if(isset($this->arrProduct['price01_max'])){
        $this->arrProducts[$key]['drate_max'] = round(100 - $this->arrProduct['price02_max'] / $this->arrProduct['price01_max'] * 100);
    }
    if(isset($this->arrProduct['price01_min'])){
        $this->arrProducts[$key]['drate_min'] = round(100 - $this->arrProduct['price02_min'] / $this->arrProduct['price01_min'] * 100);
    }
}

一応、規格がある場合を考慮して、最高の標準価格と販売価格で drate_max と、最低の標準価格と販売価格で drate_min を求めてみた。
そして、$this->arrProducts に代入。

2.data/Smarty/templates/default/products/list.tpl の適当な箇所に以下のコードをそれぞれ挿入。
サンプルでは、通常価格は販売価格の上、割引率は販売価格の下に配置しました。

<!--★通常価格★-->
<!--{if $arrProduct.price01_max > 0}-->
    <dl class="normal_price">
        <dt><!--{$smarty.const.NORMAL_PRICE_TITLE}-->(税込):</dt>
        <dd class="price">
            <span id="price01_default">
                <!--{if $arrProduct.price01_min == $arrProduct.price01_max}-->
                    <!--{$arrProduct.price01_min|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->
                <!--{else}-->
                    <!--{$arrProduct.price01_min|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->~<!--{$arrProduct.price01_max|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->
                <!--{/if}-->
            </span><span id="price01_dynamic"></span>
            円
        </dd>
    </dl>
<!--{/if}-->
<!--★割引率-->
<!--{if $arrProduct.drate_min != ''}-->
<div class="pricebox sale_price">
    割引率:
    <span class="price">
            <!--{if $arrProduct.drate_min == $arrProduct.drate_max}-->
                <!--{$arrProduct.drate_min|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->%OFF
            <!--{else}-->
                <!--{$arrProduct.drate_max|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->~<!--{$arrProduct.drate_min|sfCalcIncTax:$arrSiteInfo.tax:$arrSiteInfo.tax_rule|number_format}-->%OFF
            <!--{/if}-->
    </span>
</div>
<!--{/if}-->