先週、会員ログイン時のみ商品が購入できるようにしたい(商品詳細ページ編)というのをやりました。
今回はその続編で、商品一覧ページの場合をやってみます。
1~3の手順は、商品詳細ページ編と全く同じです。すでにカスタマイズを実施済みの方は飛ばしてください。
1.まず会員限定商品のフラグを設定します。
商品属性の中でどれを使ってもいいのですが、商品ステータスを使うとまずまず楽チンそうです。
システム設定>マスターデータ管理 の、mtb_status で新規レコードを追加します。
2.商品ステータスは商品詳細ページ等に商品ステータスアイコンが付く仕様になっていますので、
ついでにステータスアイコンのパスを設定しておくと良いでしょう。
システム設定>マスターデータ管理 の、mtb_status_image で新規レコードを追加します。
mtb_status_image で新規レコードを設定した場合は、該当するアイコン用画像を作成し、サーバーに保存しておきます。
保存場所は、html/user_data/packages/default/img/icon です。
こんな感じでしょうか。(お好きに剥がして使ってください。)
3.会員限定にしたい商品を編集して、商品ステータスの「会員限定商品」にチェックを入れます。
チェックを入れた商品に「会員限定商品」アイコンが付いているか、フロント側の商品一覧などで確認してみてください。
ここまで問題なければ前準備完了です。
4.商品一覧ページのテンプレートを修正します。
考え方は、商品詳細ページと同じで、商品ステータスフラグを表示するループで、会員限定商品かどうかのフラグが立つようにし、
フラグの有無によってカート表示を切り替えます。
まずは、フラグの取得部分。data/Smarty/templates/default/products/detail.tpl を修正してください。
<!--▼商品ステータス--> <!--{assign var=customer_product_flg value=0}--> <!--{if count($productStatus[$id]) > 0}--> <ul class="status_icon clearfix"> <!--{foreach from=$productStatus[$id] item=status}--> <li> <img src="<!--{$TPL_URLPATH}--><!--{$arrSTATUS_IMAGE[$status]}-->" width="60" height="17" alt="<!--{$arrSTATUS[$status]}-->"/> </li> <!--{if $status == 6}--><!--{assign var=customer_product_flg value=1}--><!--{/if}--> <!--{/foreach}--> </ul> <!--{/if}--> <!--▲商品ステータス-->
5.さらにカート表示部分を修正します。同じく、data/Smarty/templates/default/products/detail.tpl を修正してください。
<!--▼買い物かご--> <input type="hidden" name="product_id" value="<!--{$id|h}-->" /> <input type="hidden" name="product_class_id" id="product_class_id<!--{$id|h}-->" value="<!--{$tpl_product_class_id[$id]}-->" /> <div class="cart_area clearfix"> <!--{if ($customer_product_flg == 1 && $tpl_login == true) || $customer_product_flg == 0}--> <!--{if $tpl_stock_find[$id]}--> <!--{if $tpl_classcat_find1[$id]}--> <div class="classlist"> <dl class="size01 clearfix"> <!--▼規格1--> <dt><!--{$tpl_class_name1[$id]|h}-->:</dt> <dd> <select name="classcategory_id1" style="<!--{$arrErr.classcategory_id1|sfGetErrorColor}-->"> <!--{html_options options=$arrClassCat1[$id] selected=$arrProduct.classcategory_id1}--> </select> <!--{if $arrErr.classcategory_id1 != ""}--> <p class="attention">※ <!--{$tpl_class_name1[$id]}-->を入力して下さい。</p> <!--{/if}--> </dd> <!--▲規格1--> </dl> <!--{if $tpl_classcat_find2[$id]}--> <dl class="size02 clearfix"> <!--▼規格2--> <dt><!--{$tpl_class_name2[$id]|h}-->:</dt> <dd> <select name="classcategory_id2" style="<!--{$arrErr.classcategory_id2|sfGetErrorColor}-->"> </select> <!--{if $arrErr.classcategory_id2 != ""}--> <p class="attention">※ <!--{$tpl_class_name2[$id]}-->を入力して下さい。</p> <!--{/if}--> </dd> <!--▲規格2--> </dl> <!--{/if}--> </div> <!--{/if}--> <div class="cartin clearfix"> <div class="quantity"> 数量:<input type="text" name="quantity" class="box" value="<!--{$arrProduct.quantity|default:1|h}-->" maxlength="<!--{$smarty.const.INT_LEN }-->" style="<!--{$arrErr.quantity|sfGetErrorColor}-->" /> <!--{if $arrErr.quantity != ""}--> <br /><span class="attention"><!--{$arrErr.quantity}--></span> <!--{/if}--> </div> <div class="cartin_btn"> <!--★カゴに入れる★--> <div id="cartbtn_default_<!--{$id}-->"> <input type="image" id="cart<!--{$id}-->" src="<!--{$TPL_URLPATH}-->img/button/btn_cartin.jpg" alt="カゴに入れる" onclick="fnInCart(this .form); return false;" onmouseover="chgImg('<!--{$TPL_URLPATH}-->img/button/btn_cartin_on.jpg', this);" onmouseout="chgImg('<!--{$TPL_URLPATH}-->img/button/btn_cartin.jpg', this);" /> </div> <div class="attention" id="cartbtn_dynamic_<!--{$id}-->"></div> </div> </div> <!--{else}--> <div class="cartbtn attention">申し訳ございませんが、只今品切れ中です。</div> <!--{/if}--> <!--{else}--> <div class="attention">この商品は会員限定です。</div> <!--{/if}--> </div> <!--▲買い物かご-->
6.商品詳細ページだとこれでOKなのですが、商品一覧ページの場合、会員ログインしてもカート表示が行われないのではないかと思います。
それは $tpl_login がPHP側で取得できていないからです。
というわけで、data/class/pages/products/LC_Page_Products_List.php の actionメソッドの末尾にでも、
以下のようなコードを入れてあげます。
// ログイン判定 $objCustomer = new SC_Customer_Ex(); if ($objCustomer->isLoginSuccess() === true) { //お気に入りボタン表示 $this->tpl_login = true; }
たぶんこれで大丈夫かな?