以前、2.11.2 版で同様の内容を投稿しました。
https://ec-cube.nakweb.com/blog/806.html
その中のコメントで、「スマートフォンでもっと見るボタンを押した時にうまくいかない」というコメントが
ありましたので、2.12.1での挙動を試しつつ、コメントにお答えしたいと思います。
PCに関して言えば 2.12.1 でも以前の記事と同じコードで実現できました。
ちょっとコードを変えましたので、おさらいがてら記します。
1.data/class/pages/products/LC_Page_Products_List.php の 134行目あたりに以下のコードを挿入
// 商品一覧データに割引率を追加 foreach($this->arrProducts as $key => $val){ // 商品一覧データに割引率を追加 if(isset($val['price01_max'])){ $this->arrProducts[$key]['drate_max'] = round(100 - $val['price02_max'] / $val['price01_max'] * 100); } if(isset($val['price01_min'])){ $this->arrProducts[$key]['drate_min'] = round(100 - $val['price02_min'] / $val['price01_min'] * 100); } }
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}-->
3.data/Smarty/templates/default/products/list.tpl の価格表示部分の下あたりに以下のコードを挿入
<!--★割引率--> <!--{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}-->
これでPCには割引率が表示されたのではないでしょうか。
次に今回はスマホもやってみます。
スマホも基本的には同じなんですが、「もっと見る」ボタンを押した場合は、
getProducts関数を使って、各要素に値を挿入している点を考慮しないといけません。
4.data/Smarty/templates/sphone/products/list.tpl の価格表示部の上あたりに以下のコードを挿入
<!--★通常価格★--> <p> <span class="pricebox sale_price"><span class="mini">通常価格(税込):</span></span> <span class="normal_price"> <span id="price01_default_<!--{$id}-->"> <!--{if $arrProduct.price01_min_inctax == $arrProduct.price01_max_inctax}--> <!--{$arrProduct.price01_min_inctax|number_format}--> <!--{else}--> <!--{$arrProduct.price01_min_inctax|number_format}-->~<!--{$arrProduct.price01_max_inctax|number_format}--> <!--{/if}--> </span><span id="price01_dynamic_<!--{$id}-->"> </span>円 </span> </p>
5.data/Smarty/templates/sphone/products/list.tpl の価格表示部の下あたりに以下のコードを挿入
<!--★割引率--> <div class="pricebox sale_price"> 割引率: <span class="drate"> <!--{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>
6.data/Smarty/templates/sphone/products/list.tpl の getProducts関数の一部を以下のように書き換え
//通常価格をセット var normal_price = $($(".list_area span.normal_price").get(maxCnt)); //通常価格をクリア normal_price.empty(); var normalPriceVal = ""; //通常価格が範囲か判定 if (product.price01_min == product.price01_max) { normalPriceVal = product.price01_min_tax_format + '円'; } else { normalPriceVal = product.price01_min_tax_format + '~' + product.price01_max_tax_format + '円'; } normal_price.append(normalPriceVal); //販売価格をセット var price = $($(".list_area span.price").get(maxCnt)); //販売価格をクリア price.empty(); var priceVale = ""; //販売価格が範囲か判定 if (product.price02_min == product.price02_max) { priceVale = product.price02_min_tax_format + '円'; } else { priceVale = product.price02_min_tax_format + '~' + product.price02_max_tax_format + '円'; } price.append(priceVale); //割引率をセット var drate = $($(".list_area span.drate").get(maxCnt)); //割引率をクリア drate.empty(); //割引率が範囲か判定 var drateVal = ""; if(product.drate_min == product.drate_max){ drateVal = product.drate_min + '%OFF'; } else { drateVal = product.drate_min + '~' + product.drate_max + '%OFF'; } drate.append(drateVal);
まぁ、通常価格が0円の時に非表示になるようにせぃや~だの、いろいろ突っ込みどころはあるかと思いますが、
疲れたのでこの辺で。
上記の記載通りに(PCのみ)やってみて、商品一覧ページでは割引率が表示されるのですが商品詳細ページには割引率が表示されません。
どうしたらよろしいのでしょうか?
バージョンは2.12.1です。
また、割引金額を表示するようなことはできるのでしょうか?