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
-
前の記事
EC-CUBEカスタマイズ – 商品詳細ページにテキスト入力欄を追加を試す 2011.09.15
-
次の記事
MojoliciousでDBIx::CustomやDBIx::Connectorを使う時 2011.10.14