規格を利用していて、ある規格(長いものや重いものなど)の場合は別途送料となる場合の処理を書いてみる。
ただし無理やり実装。
動作
該当する規格分類の場合は送料を通常より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; // 規格分類チェック(送料オプション) $classcategory_flag = $objCartSess->chkClassCategory(); if($classcategory_flag){ $arrData['deliv_fee'] += 1000; }
例では該当規格分類の場合は1000円プラスするようになっている。
決め打ちの場合ここまでで出来てしまう。
テンプレートに注釈をつけるなら下記のように tpl_classcategory_flag をつけて、テンプレートを修正する。
修正前
修正後
// 合計送料の取得 $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








