[EC-CUBE]個数分送料+送料無料(同梱対応)商品のカスタマイズ

Webサイトリニューアル後、初のブログです。

今回は、オープンソースECサイト構築パッケージ『EC-CUBE』を使って実際に行ったカスタマイズをご紹介したいと思います。

EC-CUBEの送料計算は、通常「配送設定」で「配送業者」に都道府県ごとの配送料をせっていし、お客様のご住所と選択していただいた配送方法から自動的に算出する方法で、何個口であっても送料は同じです。

しかし今回の案件では、商品1個の梱包が大きく、1個につき都道府県ごとに設定した送料が必要です。
また、それらの商品に同梱できる小さな商品が、同梱専用として送料無料商品に設定できる必要があります。

これらに対応するために、以下の変更を加えました。

★データベース

商品情報のテーブル[dtb_products]には、今後商品ごとの送料を設定を実装するために[deliv_fee]というフィールドが用意されています。
本来ここには、商品ごとの送料単価が設定されるのですが、必要なのは都道府県別の送料なので、このフィールドを送料無料設定用フラグとして使わせてもらうことにします。

「送料無料設定(無料=1、通常送料=0)」とする

 

★商品登録画面に送料区分を表示
data/Smarty/templates/default/admin/products/product.tpl
に、以下のソースを追加します。

<tr class="fs12n">
<td bgcolor="#f2f1ec" width="160">送料区分<span class="red"> *</span></td>
<td bgcolor="#ffffff" width="557"><input type="radio" name="deliv_fee" value="1" <!--{if $arrForm.deliv_fee == "1"}-->checked<!--{/if}-->/>送料無料(同梱対応) <input type="radio" name="deliv_fee" value="0" <!--{if $arrForm.deliv_fee == "0"}-->checked<!--{/if}--> />通常商品</td>
</tr>

 

★注文確認画面に送料区分を表示
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.deliv_fee == 1}-->
送料無料(同梱対応)
<!--{else}-->
通常商品
<!--{/if}-->
</td>
</tr>

 

★送料計算式を変更
/httpdocs/data/class_extends/helper_extends/SC_Helper_DB_Ex.php
送料計算式を 送料×(アイテム数ー送料無料商品数)に変えます。
$objPage->tpl_total_deliv_fee  に、カートに入った商品のdeliv_feeフィールドの合計が格納されています。deliv_feeフィールドでは送料無料商品を1としているので、=送料無料商品点数ということになります。

/httpdocs/data/class/helper/SC_Helper_DB.php
から、function sfTotalConfirmの部分をすべてSC_Helper_DB_Ex.phpにコピーし、以下の部分を変更します。

// 配送業者の送料が有効の場合
if (OPTION_DELIV_FEE == 1) {
// 送料の合計を計算する(配送業者送料×(アイテム数-送料無料商品数))
$arrData['deliv_fee'] += ($this->sfGetDelivFee($arrData)*($total_quantity-$objPage->tpl_total_deliv_fee));
}

以上で、個数分の都道府県別送料と、同梱対応(送料無料)商品が機能するはずです。

何か問題点があればご指摘ください。