Labo

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

2012年11月04日 / 投稿者名:fukap


先週、会員ログイン時のみ商品が購入できるようにしたい(商品詳細ページ編)というのをやりました。
今回はその続編で、商品一覧ページの場合をやってみます。
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;
        }

たぶんこれで大丈夫かな?

コメントを残す

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

* Copy This Password *

* Type Or Paste Password Here *

*

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