EC-CUBE2.11 配送先ごとに送料を設定する…。 | φ(..)メモとして残しておこう…

EC-CUBE2.11 配送先ごとに送料を設定する…。

なにやら、EC-CUBEのコミュでこのブログの記事にリンクが貼られていましたょ(・∀・)

というわけで、配送先ごとに送料を設定する方法を…。


まずは、前提条件として。

・商品毎に送料が設定されている。
・同じ配送先の送料は、商品別送料の中から一番高い金額を設定する。
・幾ら以上は送料無料…の設定がある。


いじるのは、おなじみの「/data/class/SC_CartSession.php」です。

まずは608行目付近の

// 送料無料チェック
if ($this->isDelivFree($productTypeId)) {
$results['deliv_fee'] = 0;
}

の後に、以下のコードを追加っと。




//--------------------------------------------------------
/* ▼▼▼お届け先が複数ならそれごとに送料を再計算▼▼▼ */
//--------------------------------------------------------


if ( count($_SESSION['shipping']) > 1 ){

//---------[初期処理]-------------

//とりあえず、$results['deliv_fee']を0にしておく
$results['deliv_fee'] = 0;

//何人目かを記録しておくためのフラグ
$multi = 0;

//---------[初期処理終了]---------

//人数分の繰り返し
foreach ( $_SESSION['shipping'] as $deli) {

//配送先ごとの商品代金合計を初期化
$total_indiv = 0;

$temp_list = $deli['shipment_item'];
$item = array_keys( $temp_list );//商品のコードを配列から取得

//商品分の繰り返し
for ($loop = 0; $loop < count($item); $loop++){

$item_code = $item[$loop];

$quant = $item_code;
$quantity = $deli['shipment_item'][$quant]['quantity'];

//EC-CUBEのデータベースから商品価格と送料を引っ張ってくる
$objQuery = new SC_Query();
$haisou = $objQuery->getOne("SELECT price02,deliv_fee FROM dtb_products_class where product_code = " . $item_code . ";");

$temp_indiv = $haisou['sell_price'] * $quantity;
$total_indiv += $temp_indiv;

$subTotal_fee[] = $haisou['deliv_fee'];

}//人数分の繰り返し


//個別の購入金額が送料無料条件なら送料無料、そうでなければ一番高い送料を設定
$deliv_fee = ( $total_indiv > $objQuery->getOne("SELECT free_rule FROM dtb_base_info;") ) ? 0:max($subTotal_fee);

//送料の総合計に個別送料を足していく
$results['deliv_fee'] += $deliv_fee;

//送料と合計金額をセッションに保存(後で表示に使うため)
$_SESSION['multi_deliv'][$multi]['deliv_fee'] = $deliv_fee;
$_SESSION['multi_deliv'][$multi]['total_indiv'] = $total_indiv;

$multi++;

}//人数分の繰り返し

}

//----------------------------------------------------
/* ▲▲▲お届け先ごとに送料を再計算(ここまで)▲▲▲ */
//----------------------------------------------------



試しにやってみたら、動いたんで問題はないかと思うのですが…。


デフォルトの状態の処理なら、最新の記事を見てください。