商品送料(商品毎に送料を設定する機能)を実装する。
※初期状態では、販売価格(単価)に入力した商品送料を上乗せする単純な仕様になっている。
さまざまな送料計算に対応できる拡張性をもたせるカスタマイズ。
/data/Smarty/templates/default/admin/products/confirm.tpl
在庫数の下に追加する。
<tr>
<td bgcolor="#f2f1ec" width="160" class="fs12n">在庫数</td>
<td bgcolor="#ffffff" width="557" class="fs12n">
<!--{if $arrForm.stock_unlimited == 1}-->
無制限
<!--{else}-->
<!--{$arrForm.stock|escape}-->
個<!--{/if}-->
</td>
</tr>
<!--{/if}-->
<!-- ▼送料カスタマイズ -->
<tr>
<th>商品送料</th>
<td>
<!--{$arrForm.deliv_fee|escape}-->
円</td>
</tr>
<!-- ▲送料カスタマイズ -->
商品画面。
/data/Smarty/templates/default/admin/products/product.tpl
「* 送料の個別指定は次期開発で追加予定 」のところを次期開発を待たずにカスタマイズしてやる。
$arrForm.stock_unlimited == "1"}-->checked<!--{/if}--> onclick="fnCheckStockLimit('<!--{$smarty.const.DISABLED_RGB}-->');"/>無制限</td>
</td>
</tr>
<!--{/if}-->
<tr class="fs12n">
<td bgcolor="#f2f1ec" width="160">商品送料</td>
<td bgcolor="#ffffff" width="557">
<span class="red12"><!--{$arrErr.deliv_fee}--></span>
<input type="text" name="deliv_fee" value="<!--{$arrForm.deliv_fee|escape}-->" size="6" class="box6" maxlength="<!--{$smarty.const.PRICE_LEN}-->" style="<!--{if $arrErr.deliv_fee != ""}-->background-color: <!--{$smarty.const.ERR_COLOR}--><!--{/if}-->"/>円<span class="red10"> (半角数字で入力)</span></td>
<!--{if $smarty.const.OPTION_PRODUCT_DELIV_FEE != 1}--><br /><span class="attention">※現在無効です</span> (パラメータ OPTION_PRODUCT_DELIV_FEE)<!--{/if}--> </td></tr>
続いてロジックの修正
/data/class/SC_CartSession.php
Line348のgetAllProductsDelivFeeメソッドをコメントアウト。削除でもいいけど。
/*** コメントアウト @送料拡張用 2009.05.07
// 全商品の合計送料
function getAllProductsDelivFee() {
// ポイント合計
$total = 0;
$max = $this->getMax();
for($i = 0; $i <= $max; $i++) {
$deliv_fee = $_SESSION[$this->key][$i]['deliv_fee'];
$quantity = $_SESSION[$this->key][$i]['quantity'];
$total+= ($deliv_fee * $quantity);
}
return $total;
}
**/
/data/class/helper/SC_Helper_DB.php
Line1420のsfTotalConfirm()メソッドの中を修正。
Line14391~
// 商品ごとの送料が有効の場合
if (OPTION_PRODUCT_DELIV_FEE == 1) {
// $arrData['deliv_fee']+= $objCartSess->getAllProductsDelivFee();
// 全商品の合計数量を算出する @送料カスタマイズ 2009.05.07
$this->lfAddAllProductsDelivFee($arrData, $objPage, $objCartSess);
}
Line1446~
// 配送業者の送料が有効の場合
if (OPTION_DELIV_FEE == 1) {
// 送料の合計を計算する
//$arrData['deliv_fee']
// += $this->sfGetDelivFee($arrData['deliv_pref'],
// $arrData['payment_id']);
// 都道府県、支払方法から配送料金を加算する @送料カスタマイズ 2009.05.07
$this->lfAddDelivFee($arrData);
}
ファイルの最後にメソッドを3つ追加。
/***
* 全商品の合計数量を加算する
* @送料カスタマイズ 2009.05.07
* @author y-nakajima
***/
function lfAddAllProductsDelivFee(&$arrData, &$objPage, &$objCartSess) {
$arrData['deliv_fee'] += $this->lfCalcAllProductsDelivFee($arrData, $objCartSess);
}
/***
* 全商品の合計送料を加算する
* @送料カスタマイズ 2009.05.07
* @author y-nakajima
* @return 全商品の合計送料
***/
function lfCalcAllProductsDelivFee(&$arrData, &$objCartSess){
$objQuery = new SC_Query();
$deliv_fee_total = 0;
$max = $objQuery->getMax();
for($i = 0; $i <= $max; $i++){
// 商品送料
$deliv_fee = $objQuery->getOne('SELECT deliv_fee FROM dtb_products WHERE product_id = ?',
array($_SESSION[$objCartSess->key][$i]['id'][0])); // 数量
$quantity = $_SESSION[$objCartSess->key][$i]['quantity']; // 累積
$deliv_fee_total += $deliv_fee * $quantity;
}
return $deliv_fee_total;
}
/***
* 都道府県、支払方法から配送料金を加算する
* @送料カスタマイズ 2009.05.07
* @author y-nakajima
***/
function lfAddDelivFee(&$arrData){
$arrData['deliv_fee'] += $this->sfGetDelivFee($arrRet);
}
これでいいはず。
最終更新:2009年05月07日 17:40