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++;
}//人数分の繰り返し
}
//----------------------------------------------------
/* ▲▲▲お届け先ごとに送料を再計算(ここまで)▲▲▲ */
//----------------------------------------------------
試しにやってみたら、動いたんで問題はないかと思うのですが…。
デフォルトの状態の処理なら、最新の記事を見てください。
というわけで、配送先ごとに送料を設定する方法を…。
まずは、前提条件として。
・商品毎に送料が設定されている。
・同じ配送先の送料は、商品別送料の中から一番高い金額を設定する。
・幾ら以上は送料無料…の設定がある。
いじるのは、おなじみの「/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++;
}//人数分の繰り返し
}
//----------------------------------------------------
/* ▲▲▲お届け先ごとに送料を再計算(ここまで)▲▲▲ */
//----------------------------------------------------
試しにやってみたら、動いたんで問題はないかと思うのですが…。
デフォルトの状態の処理なら、最新の記事を見てください。