わりによくあるカスタマイズだと思うのですが、本ブログでは取り上げてなかったようです。
今回は、商品の一部に会員限定商品を設定し、会員限定商品に関してはカートボタンの代わりに「この商品は会員限定です。」と表示する、
という仕様をカスタマイズで実現したいと思います。
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 内の商品ステータス部分の記述を以下のような感じにします。
コードを見るとわかる通り、商品ステータスIDが6の場合に…と決め打ちしているので、適宜数値は変更してください。
(本当はこういうのは パラメーターで管理する方が良いと思う)
<!--▼商品ステータス-->
<!--{assign var=ps value=$productStatus[$tpl_product_id]}-->
<!--{assign var=customer_product_flg value=0}-->
<!--{if count($ps) > 0}-->
<ul class="status_icon clearfix">
<!--{foreach from=$ps item=status}-->
<li>
<img src="<!--{$TPL_URLPATH}--><!--{$arrSTATUS_IMAGE[$status]}-->" width="60" height="17" alt="<!--{$arrSTATUS[$status]}-->" id="icon<!--{$status}-->" />
</li>
<!--{if $status == 6}--><!--{assign var=customer_product_flg value=1}--><!--{/if}-->
<!--{/foreach}-->
</ul>
<!--{/if}-->
<!--▲商品ステータス-->
5.最後にカート表示の記述部分で条件分岐を組み込みます。
data/Smarty/templates/default/products/detail.tpl 内のカートボタン表示部分の記述を以下のような感じにします。
なお、data/class/pages/products/LC_Page_Products_Detail.php の actionメソッド内で、
あらかじめログイン判定ロジックが仕込まれていて、$this->tpl_login に会員ログインしているか否かのフラグが入っています。
ですので、会員ログインしているか否かは、$tpl_login をフラグにすることができます。
<!--▼買い物かご-->
<div class="cart_area clearfix">
<input type="hidden" name="mode" value="cart" />
<input type="hidden" name="product_id" value="<!--{$tpl_product_id}-->" />
<input type="hidden" name="product_class_id" value="<!--{$tpl_product_class_id}-->" id="product_class_id" />
<input type="hidden" name="favorite_product_id" value="" />
<!--{if ($customer_product_flg == 1 && $tpl_login == true) || $customer_product_flg == 0}-->
<!--{if $tpl_stock_find}-->
<!--{if $tpl_classcat_find1}-->
<div class="classlist">
<!--▼規格1-->
<ul class="clearfix">
<li><!--{$tpl_class_name1|h}-->:</li>
<li>
<select name="classcategory_id1" style="<!--{$arrErr.classcategory_id1|sfGetErrorColor}-->">
<!--{html_options options=$arrClassCat1 selected=$arrForm.classcategory_id1.value}-->
</select>
<!--{if $arrErr.classcategory_id1 != ""}-->
<br /><span class="attention">※ <!--{$tpl_class_name1}-->を入力して下さい。</span>
<!--{/if}-->
</li>
</ul>
<!--▲規格1-->
<!--{if $tpl_classcat_find2}-->
<!--▼規格2-->
<ul class="clearfix">
<li><!--{$tpl_class_name2|h}-->:</li>
<li>
<select name="classcategory_id2" style="<!--{$arrErr.classcategory_id2|sfGetErrorColor}-->">
</select>
<!--{if $arrErr.classcategory_id2 != ""}-->
<br /><span class="attention">※ <!--{$tpl_class_name2}-->を入力して下さい。</span>
<!--{/if}-->
</li>
</ul>
<!--▲規格2-->
<!--{/if}-->
</div>
<!--{/if}-->
<!--★数量★-->
<dl class="quantity">
<dt>数量:</dt>
<dd><input type="text" class="box60" name="quantity" value="<!--{$arrForm.quantity.value|default:1|h}-->" maxlength="<!--{$smarty.const.INT_LEN}-->" style="<!--{$arrErr.quantity|sfGetErrorColor}-->" />
<!--{if $arrErr.quantity != ""}-->
<br /><span class="attention"><!--{$arrErr.quantity}--></span>
<!--{/if}-->
</dd>
</dl>
<div class="cartin">
<div class="cartin_btn">
<div id="cartbtn_default">
<!--★カゴに入れる★-->
<a href="javascript:void(document.form1.submit())" onmouseover="chgImg('<!--{$TPL_URLPATH}-->img/button/btn_cartin_on.jpg','cart');" onmouseout="chgImg('<!--{$TPL_URLPATH}-->img/button/btn_cartin.jpg','cart');">
<img src="<!--{$TPL_URLPATH}-->img/button/btn_cartin.jpg" alt="カゴに入れる" name="cart" id="cart" /></a>
</div>
</div>
</div>
<div class="attention" id="cartbtn_dynamic"></div>
<!--{else}-->
<div class="attention">申し訳ございませんが、只今品切れ中です。</div>
<!--{/if}-->
<!--{else}-->
<div class="attention">この商品は会員限定です。</div>
<!--{/if}-->
これで商品詳細ページはできたので、次回は商品一覧ページをやりたいと思います。












ピンバック: [EC-CUBE 2.12.2] 会員ログイン時のみ商品が購入できるようにしたい(商品一覧ページ編) | NAKWEB × EC-CUBE