eccube2.11 配送先毎に送料を加算。 | φ(..)メモとして残しておこう…

eccube2.11 配送先毎に送料を加算。

EC-CUBE2.11系で、一番変わったところといえば複数の配送先指定ができること。

でも、どう考えても複数の配送先に個別に送料を加算できるようにはなっていない。

ってわけで個々の配送先に送料を計算するためのカスタマイズを…。


今回カスタマイズした配送方法一覧

メール便・210円
送料無料メール便・0円
通常宅配・525円
送料込みの通常宅配・0円
宅配クール便・775円
送料込みクール便・0円
メール便には商品毎に同梱最大数が設定されていて、それを超えた場合には通常宅配便扱い・525円


商品の組み合わせと配送料

メール便のみ・210円
無料メール便のみ・0円
通常宅配+メール便・735円
通常宅配+無料メール便・525円
通常宅配のみ・525円
送料込宅配+メール便・210円
送料込宅配+無料メール便・0円
送料込宅配のみ・0円
クール便のみ・775円
クール便+メール便・985円
クール便+無料メール便・775円




…と、とっても組み合わせが多い。

さらに、配送先別に商品代金が5250円を超えたら送料無料に。

っつーことで、配送先が複数あった場合の処理をφ(`д´)メモメモ...





data/class/SC_CartSession.php

function calculate()

foreach ($cartItems as $item)内の
"// 合計を計算"の直前に処理を追加


-------------処理-----------------------------------------------

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

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

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

//フラグ関係を初期化
$_SESSION['flg']['mail'] = 0;
$_SESSION['flg']['cool'] = 0;
$_SESSION['flg']['normal'] = 0;

//配送先別の商品総額も初期化
$total_indiv = 0;

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

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

$item_code = $item[$loop];

//商品購入数を(ry
$quant = $item_code;
$quantity = $deli['shipment_item'][$quant]['quantity'];

/*DBから必要なデータを取得
*同じクラス内にfunction Example()で処理を書いておく
*商品コードからメール便フラグ・クール便フラグ・送料フラグ・商品価格等を取得
*/
$haisou = $this->($item_code);

//フラグを立てる処理。これも処理を書いておく…
$flags = $this->Flags($haisou);

//商品の購入金額
$temp_indiv = $haisou['sell_price'] * $quantity;
$total_indiv += $temp_indiv;

}//商品分の繰り返し

//フラグから送料を取得する処理も(ry
$deliv_fee = $this->FlgToDeliv($flags);

//個別の購入金額が5250円以上なら、送料無料
if ( $total_indiv > 5249 ) { $deliv_fee = 0; }

$results['deliv_fee'] += $deliv_fee;

}//人数分の繰り返し

}

------------------ここまで------------------------------------------


いやぁ…疲れた。


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