EC-CUBEカスタマイズ ある規格のある分類のみ送料をプラスする

EC-CUBEカスタマイズ ある規格のある分類のみ送料をプラスする

規格を利用していて、ある規格(長いものや重いものなど)の場合は別途送料となる場合の処理を書いてみる。
ただし無理やり実装。

動作

該当する規格分類の場合は送料を通常より1000円プラスする。

環境

EC-CUBE 2.4
PostgreSQL

段取り

各規格の分類は dtb_classcategory に格納されていて、classcategory_id というユニークな通し番号が振られている。
カートのセッションにもこの通し番号が格納されているようなので、こいつを使って判別することとする。
なので、適用する規格の分類を登録した後に、classcategory_id を調べなくてはならない。

工程

[eccube]/data/class/SC_CartSession.php

function chkClassCategory という関数を追加する.
一番最終行の

}
?>

の前に追加.

    /** カート中の商品をチェックして別送料対象かチェックする
     * 1つでも対象商品があればTrueを返す.
     * True:対象商品あり False:対象商品なし
     * $_SESSION[$this->key][$i]['id'][0]...プロダクトid;
     * $_SESSION[$this->key][$i]['id'][1]...規格1;
     * $_SESSION[$this->key][$i]['id'][2]...規格2;
     */
    function chkClassCategory() {
        $max = $this->getMax();
        for($i = 0; $i <= $max; $i++) {
            $classcategory1 = $_SESSION[$this->key][$i]['id'][1];
            $classcategory2 = $_SESSION[$this->key][$i]['id'][2];
            
            // マッチする条件を設定(以下は例)
            if(
                ($classcategory1 >= 208 AND $classcategory1 <= 211)
                OR ($classcategory2 >= 208 AND $classcategory2 <= 211)
                OR ($classcategory1 >= 11 AND $classcategory1 <= 16)
                OR ($classcategory2 >= 11 AND $classcategory2 <= 16)
            ) return true;
        }
        // マッチしなかったらfalseを返す
        return false;
    }

[eccube]/data/class/helper/SC_Helper_DB.php
function sfTotalConfirm

修正前

        // 合計送料の取得
        $arrData['deliv_fee'] = 0;

修正後

        // 合計送料の取得
        $arrData['deliv_fee'] = 0;

        // 規格分類チェック(送料オプション)
        $classcategory_flag = $objCartSess->chkClassCategory();
        if($classcategory_flag){
            $arrData['deliv_fee'] += 1000;
        }

例では該当規格分類の場合は1000円プラスするようになっている。
決め打ちの場合ここまでで出来てしまう。

テンプレートに注釈をつけるなら下記のように tpl_classcategory_flag をつけて、テンプレートを修正する。

修正前

        // 合計送料の取得
        $arrData['deliv_fee'] = 0;

修正後

        // 合計送料の取得
        $arrData['deliv_fee'] = 0;

        // 長尺商品チェック
        $classcategory_flag = $objCartSess->chkClassCategory();
        if($classcategory_flag){
            $arrData['deliv_fee'] += 1000;
            $objPage->tpl_classcategory_flag = 1;
        }

[eccube]/data/Smarty/templates/defaultKai/shopping/confirm.tpl
修正前

        <tr>
          <th colspan="4" class="resulttd">送料</th>
          <td class="pricetd"><!--{$arrData.deliv_fee|number_format}-->円</td>
        </tr>

修正後

        <tr>
          <th colspan="4" class="resulttd">送料
          <!--{if $tpl_classcategory_flag}-->
		  <br />
		  <span class="price">(内 大判送料:1,000円)</span>
          <!--{/if}-->
		  </th>
          <td class="pricetd"><!--{$arrData.deliv_fee|number_format}-->円</td>
        </tr>

[eccube]/data/class/pages/shopping/LC_Page_Shopping_Confirm.php
変更なしでおk