2020年5月29日(金) 19:56 JST

配送業者別及び商品種別(mtb_product_type)に 送料無料条件設定

EC-CUBE EC-CUBE カスタマイズ 配送業者別及び商品種別(mtb_product_type)に 送料無料条件設定

EC-CUBEではデフォルトで送料無料条件、いくら以上購入時無料という設定ができます。
送料無料条件は配送業者及び商品種別に関係なく合計金額で算出されてしまうので、
たとえば、メーカー直送商品など出荷先が違う場合は、デフォルトでは、対応できません。
配送業者別及び商品種別(mtb_product_type)別に送料無料条件設定できるように少しカスタマイズしました。
商品種別(mtb_product_type)にメーカー直送商品を追加したい場合の例
まず、商品種別(mtb_product_type)の追加
管理機能 システム設定>マスターデータ管理
mtb_product_type を選択
デフォルトで設定されている
ID 1 値:通常商品
ID 2 値:ダウンロード商品
に下記を追加
ID 3 値:メーカー直送商品

次に 配送業者設定で
基本情報管理>配送方法設定 
取扱商品種別
商品種別  通常商品 ダウンロード商品 メーカー直送商品
をチェックします。

これで商品種別ごとの配送業者は設定されます。
デフォルトの送料無料条件設定はデータベースの
テーブル dtb_baseinfoにfree_ruleで設定してあります。
又、配送業者ID(deliv_id)は、データベースの
テーブル dtb_delivのdeliv_idで確認できます。
以下データベースの変更及び各ファイルの内容の変更を伴う作業ですので、バックアップは必ずして、作業に入りましょう。
データベースがPostgreSQLの場合は、phpPgAdminやpgAdminⅢなどソフトを使ったほうが楽に作業できます。
通常商品とメーカー直送商品の2つに送料無料条件設定をするため
テーブル dtb_baseinfoに列を2つ追加します。
通常商品分
名前:free_rule1 データ型:numeric
メーカー直送商品
名前:free_rule2 データ型:numeric
管理画面から値を入力できるできるように、

\data\class\pages\admin\basis LC_Page_Admin_Basis.php
144行 以下に追記

    // 基本情報用のカラムを取り出す。
    function lfGetCol() {
        $arrCol = array(
            'company_name',
            'company_kana',
            'shop_name',
            'shop_kana',
            'shop_name_eng',
            'zip01',
            'zip02',
            'pref',
            'addr01',
            'addr02',
            'tel01',
            'tel02',
            'tel03',
            'fax01',
            'fax02',
            'fax03',
            'business_hour',
            'email01',
            'email02',
            'email03',
            'email04',
            'tax',
            'tax_rule',
            'free_rule',
            'good_traded',
            'message',
            'regular_holiday_ids',
            'latitude',
            'longitude',
            'downloadable_days',
            'downloadable_days_unlimited',
            'free_rule1', //追記分
            'free_rule2'  //追記分
        );

246行 以下に追記
        // その他
        $objFormParam->addParam('消費税率', 'tax', PERCENTAGE_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
        $objFormParam->addParam('課税規則 ', 'tax_rule', PERCENTAGE_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
        $objFormParam->addParam('送料無料条件', 'free_rule', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
        $objFormParam->addParam('配送業者ID1送料無料条件', 'free_rule1', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); //追記分
        $objFormParam->addParam('配送業者ID3送料無料条件', 'free_rule2', PRICE_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK')); //追記分
data\Smarty\templates\admin\basis index.tpl
            送料無料条件
            
                
                background-color: ;" /> 円以上購入時無料
            
        
以下に追記
         
           配送業者ID1(通常商品)送料無料条件
            
                
                background-color: ;" /> 円以上購入時無料
            
        
        
            配送業者ID3(メーカー直送商品)送料無料条件
            
                
                background-color: ;" /> 円以上購入時無料
            
        
これで、管理画面入力値をデーターベースに保存できるようになります。

次は、送料無料の判定
\data\class SC_CartSession.php
584行以下を追記 // 送料無料条件が設定されている場合 $arrInfo = $objDb->sfGetBasisData(); if ($arrInfo['free_rule'] > 0) { // 小計が送料無料条件以上の場合 if ($subtotal >= $arrInfo['free_rule']) { return true; } } if ($arrInfo['free_rule1'] > 0) { // 小計が配送業者ID1送料無料条件以上の場合 if ($subtotal >= $arrInfo['free_rule1']) { return true; } } if ($arrInfo['free_rule2'] > 0) { // 小計が配送業者ID3送料無料条件以上の場合 if ($subtotal >= $arrInfo['free_rule2']) { return true; } } return false; }
643行
        // 送料無料チェック
        if ($this->isDelivFree($productTypeId)) {
            $results['deliv_fee'] = 0;
        }
を下記に変更
        // 送料無料チェック
        $arrInfo = $objDb->sfGetBasisData();
        if (($deliv_id == 1 && $results['subtotal'] >= $arrInfo['free_rule1'] ) || ($deliv_id == 3 && $results['subtotal'] >= $arrInfo['free_rule2'] )) {
           $results['deliv_fee']= 0 ;
        }
以上で、配送業者別及び商品種別(mtb_product_type)に 送料無料条件設定は終了です。
できれば、「あといくらで送料無料です」の表示を買い物かごのページで表示したいので
フロントベージ部分の変更
\data\class\pages\cart LC_Page_Cart.php
161 行 // 送料無料までの金額を計算 $this->tpl_deliv_free[$key] = $this->arrInfo['free_rule'] - $this->tpl_total_inctax[$key]; }
を下記に変更
            // 送料無料までの金額を計算
            $this->tpl_deliv_free[$key] = $this->arrInfo['free_rule'] - $this->tpl_total_inctax[$key];
            $this->tpl_deliv_free1[$key] = $this->arrInfo['free_rule1'] - $this->tpl_total_inctax[$key];
            $this->tpl_deliv_free2[$key] = $this->arrInfo['free_rule2'] - $this->tpl_total_inctax[$key];
        }
\data\Smarty\templates\default\cart  index.tpl
79行
            

の合計金額は「」です。 あと「」で送料無料です!! 現在、「送料無料」です!!

お買い上げ商品の合計金額は「」です。 あと「」で送料無料です!! 現在、「送料無料」です!!

を下記に変更
            

の合計金額は「」です。            通常商品につきましては、「」で送料無料です!            あと「」で送料無料です!! 現在、「送料無料」です!! メーカー直送商品につきましては、「」で送料無料です!   あと「」で送料無料です!! 現在、「送料無料」です!! あと「」で送料無料です!! 現在、「送料無料」です!!

の合計金額は「」です。
通常商品につきましては、「」で送料無料です!            あと「」で送料無料です!! 現在、「送料無料」です!! メーカー直送商品につきましては、「」で送料無料です!   あと「」で送料無料です!! 現在、「送料無料」です!! あと「」で送料無料です!! 現在、「送料無料」です!!

書き終わって気付いたけど、配送業者別送料無料設定項目は配送方法登録で入力させる方がスマートかな