Labo

[EC-CUBE 2.12.2] 会員ログイン時のみ商品が購入できるようにしたい(商品詳細ページ編)

2012年10月27日 / 投稿者名:fukap


わりによくあるカスタマイズだと思うのですが、本ブログでは取り上げてなかったようです。
今回は、商品の一部に会員限定商品を設定し、会員限定商品に関してはカートボタンの代わりに「この商品は会員限定です。」と表示する、
という仕様をカスタマイズで実現したいと思います。

 

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] 会員ログイン時のみ商品が購入できるようにしたい(商品詳細ページ編) への1件のコメント

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

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

* Copy This Password *

* Type Or Paste Password Here *

*

コメント欄にコードを挿入したい場合は、[php][/php] を使ってください。