【カラーミーショップカスタマイズ】おすすめ商品をランダムで3件表示する
- 2019.07.28
- Color me shopカスタマイズ javascript+css
Color me shop のテンプレートのカスタマイズ方法をご紹介します。
「おすすめ」に登録したものからランダムで3件表示する方法です。
人気の有料テンプレート「MONO」でそのまま使えるソースも続いて紹介します。
目次
おすすめ商品をランダムで3件表示する方法
おすすめ商品の情報を全て取得し出力、スタイルシートを使ってランダムで3件だけ表示するという方法です。
html
<{section name=num loop=$recommend}> /* 出力タグをここに入れる */ <{/section}> <script> // 売れ筋商品全体の数 var recommendNum = <{$recommend_num}>; // 売れ筋商品の数だけ配列に var recommendNumArray = []; for (var i = 0; i < recommendNum; i++) { recommendNumArray.push(i); } // 売れ筋商品の数をシャッフル for (var i = recommendNumArray.length - 1; i >= 0; i--) { // 0~iのランダムな数値を取得 var rand = Math.floor( Math.random() * ( i + 1 ) ); // 配列の数値を入れ替える var tmp = recommendNumArray[i]; recommendNumArray[i] = recommendNumArray[rand]; recommendNumArray[rand] = tmp; } // 上で設定したランダム配列から表示させるものを設定 var showLi = document.querySelectorAll('それぞれの商品を囲うタグ'); // DOM取得 var limit = 3; // 表示させる数 for (var i =0; i < limit; i++) { showLi[recommendNumArray[i]].style.display = 'block'; } </script>
それぞれの商品を囲うタグ { display: none; }
テンプレートMONOでそのまま使えるソース
人気の有料テンプレート「MONO」でそのまま使えるソースです。
<{* おすすめ商品 *}>
<{* // おすすめ商品 *}>
のところを入れ替えてもらえればOKです。
html
<{* おすすめ商品 *}> <{if $recommend_num != 0}> <div class="c-section p-layout-container"> <h2 class="c-section__heading"> <div class="c-section__heading--title"> <span>おすすめ商品</span> </div> <div class="c-section__heading--sub-title"> RECOMMEND ITEM </div> </h2> <ul class="c-product-list"> <{section name=num loop=$recommend}> <li class="c-product-list__item"> <{* 商品画像 *}> <a href="<{$recommend[num].link_url}>" class="c-product-list__image-wrap c-image-wrap c-image-wrap--link"> <{* 商品画像1枚目 *}> <div class="c-image-box<{if $recommend[num].otherimg[0].url != ""}> c-image-box--main<{/if}>"> <{if $recommend[num].img_url != ""}> <img src="<{$recommend[num].img_url}>" alt="<{$recommend[num].name}>" class="c-image-box__image js-lazyload" /> <{else}> <span class="c-image-box__image c-image-box__image--noimage">No Image</span> <{/if}> </div> <{* 商品画像2枚目(2枚目が存在する場合のみ) *}> <{foreach from=$recommend[num].otherimg item=otherimg name=otherimg}> <{if $otherimg.url != "" && $smarty.foreach.otherimg.first}> <div class="c-image-box c-image-box--otherimg"> <img src="<{$otherimg.url}>" class="c-image-box__image" /> </div> <{/if}> <{/foreach}> </a> <{* 商品名 *}> <a href="<{$recommend[num].link_url}>" class="c-product-list__name"> <{$recommend[num].name}> </a> <{if !$recommend[num].soldout_flg}> <div class="c-product-info__price c-product-list__price<{if $members_login_flg && $recommend[num].discount_flg}> c-product-info__price--discount<{/if}>"> <{* 販売価格(ログイン時は会員価格) *}> <{$recommend[num].price}> <{* 割引率(ログイン時、通常販売価格と会員価格が異なる場合のみ) *}> <{if $members_login_flg && $recommend[num].discount_flg}><{$recommend[num].discount_rate}>OFF<{/if}> </div> <{* 通常販売価格(ログイン時、通常販売価格と会員価格が異なる場合のみ) *}> <{if $members_login_flg && $recommend[num].discount_flg}> <div class="c-product-info__regular-price c-product-list__regular-price"> <{$recommend[num].regular_price}> </div> <{/if}> <{else}> <{* 売り切れの表記 *}> <div class="c-product-info__soldout c-product-list__soldout"> SOLD OUT </div> <{/if}> <{* 簡易説明文 *}> <{if $recommend[num].s_expl != ""}> <div class="c-product-list__expl"> <{$recommend[num].s_expl}> </div> <{/if}> <{* お気に入り追加ボタン *}> <div class="c-product-list__fav-item"> <button type="button" <{favorite_button_attribute added_class="is-added" product_id=$recommend[num].id}>> <svg role="img" aria-hidden="true"><use xlink:href="#heart"></use></svg> </button> </div> </li> <{/section}> </ul> </div> <script> // 売れ筋商品全体の数 var recommendNum = <{$recommend_num}>; // 売れ筋商品の数だけ配列に var recommendNumArray = []; for (var i = 0; i < recommendNum; i++) { recommendNumArray.push(i); } // 売れ筋商品の数をシャッフル for (var i = recommendNumArray.length - 1; i >= 0; i--) { // 0~iのランダムな数値を取得 var rand = Math.floor( Math.random() * ( i + 1 ) ); // 配列の数値を入れ替える var tmp = recommendNumArray[i]; recommendNumArray[i] = recommendNumArray[rand]; recommendNumArray[rand] = tmp; } // 上で設定したランダム配列から表示させるものを設定 var showLi = document.querySelectorAll('#recommend li'); // DOM取得 var limit = 3; // 表示させる数 for (var i =0; i < limit; i++) { showLi[recommendNumArray[i]].style.display = 'block'; } </script> <{/if}> <{* // おすすめ商品 *}>
css
#recommend .c-product-list__item { display: none; }
テンプレートタグを変えれば「売れ筋商品」もランダムで出すことができます。
$recommend_num を $seller_num
$recommend を $seller
に変更してもらえれば「売れ筋商品」もランダムで表示できます。
売れ筋商品の場合、以下のランキングの順位を表示するソースを削除しておくのがよいでしょう。
<span class="c-product-list__index<{if $smarty.section.num.iteration < 4}> c-product-list__index--<{$smarty.section.num.iteration}><{/if}>"> <{$smarty.section.num.iteration}> </span>
-
前の記事
[javascriptエラー]Expected ‘case’ at column 5, not column 9. 2019.05.06
-
次の記事
グーグルアナリティクスで最低限おさえておきたい5項目 2019.11.23