モンスターカレンダー

« 2010年8月
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31

EC-CUBEの最近のブログ記事

EC-CUBEで、特定商品を購入時は送料を無料にするロジックを組み込む。

参考:
EC-CUBEで送料無料
[EC- CUBE]商品に送料無料(込)のフラグを設ける

考え方は1番目のサイトの通り。
送料無料対象商品のフラグには、dtb_products の deliv_fee を利用する。(将来拡張予定のフィールドだが、本サイトでは個別送料設定はないだろうと思われるため)
(2番目のサイトは、フラグのフィールドを新たに設けるやり方)

管理画面のテンプレートは1番目のサイトの通りに変更。プログラム変更はナシ。(厳密には必須チェックしなければいけないが今回は見送り)

ソース変更は、1番目サイトのID登録が必要なようなのであきらめ、2番目のサイトのコードを参考に修正する。

●SC_Helper_DB_Ex.php

1.function sfTotalCart(&$objPage, $objCartSess, $arrInfo)

(1)add行追加。

        $objPage->tpl_total_pretax = 0;        // 費用合計(税込み)
        $objPage->tpl_total_tax = 0;        // 消費税合計
        if (USE_POINT === true) {
            $objPage->tpl_total_point = 0;        // ポイント合計
        }
        $objPage->tpl_postage_flag = 0;      // add:送料無料フラグ

(2)del行削除、add行追加。
        // 商品ごとの合計金額
        $objPage->arrProductsClass[$cnt]['total_pretax'] = $objCartSess->getProductTotal($arrInfo, $arrCart[$i]['id']);
               
        // 送料の合計を計算する
        //$objPage->tpl_total_deliv_fee+= ($arrData['deliv_fee'] * $arrCart[$i]['quantity']);  //del
        $objPage->tpl_total_deliv_fee = 0;  //add

        //送料無料フラグを判定する add
        if ($arrData['deliv_fee'] > 0) {    //1:送料込み=送料無料
            $objPage->tpl_postage_flag = 1;
        }

2.function sfTotalConfirm($arrData, &$objPage, &$objCartSess, $arrInfo, $objCustomer = "")

(1)del行削除
        //del
        // 商品ごとの送料が有効の場合
        /*if (OPTION_PRODUCT_DELIV_FEE == 1) {
            $arrData['deliv_fee']+= $objCartSess->getAllProductsDelivFee();
        }*/

(2)add行追加。
        // 送料無料条件が設定されている場合
        if($arrInfo['free_rule'] > 0) {
            // 小計が無料条件を超えている場合
            if($arrData['subtotal'] >= $arrInfo['free_rule']) {
                $arrData['deliv_fee'] = 0;
            }
        }

        //add
        // 送料無料商品が含まれている場合
        if ($objPage->tpl_postage_flag > 0) {
            $arrData['deliv_fee'] = 0;
        }


●ショップ画面
商品詳細画面と一覧画面で、deliv_fee == 1 で判定し、該当する場合は「この商品を購入の際は送料無料」のメッセージを表示する。
(カート画面、トップのオススメ一覧でも対応すればなおよし。今回は対象外)
EC-CUBEのテンプレートを修正する時、どんな変数が使えるのか、配列がどんな構造か知りたい。
下記を書けば表示できる。

<!--{php}-->
$arrOrder = $this->get_template_vars('arrOrder');
print_r($arrOrder);
<!--{/php}-->