[EC-CUBE]送料カスタマイズのための準備

商品送料(商品毎に送料を設定する機能)を実装する。
※初期状態では、販売価格(単価)に入力した商品送料を上乗せする単純な仕様になっている。

さまざまな送料計算に対応できる拡張性をもたせるカスタマイズ。

/data/Smarty/templates/default/admin/products/confirm.tpl
在庫数の下に追加する。
  1. <tr>
  2. <td bgcolor="#f2f1ec" width="160" class="fs12n">在庫数</td>
  3. <td bgcolor="#ffffff" width="557" class="fs12n">
  4. <!--{if $arrForm.stock_unlimited == 1}-->
  5. 無制限
  6. <!--{else}-->
  7. <!--{$arrForm.stock|escape}-->
  8. <!--{/if}-->
  9. </td>
  10. </tr>
  11. <!--{/if}-->
  12.  
  13. <!-- ▼送料カスタマイズ -->
  14. <tr>
  15. <th>商品送料</th>
  16. <td>
  17. <!--{$arrForm.deliv_fee|escape}-->
  18. </td>
  19. </tr>
  20. <!-- ▲送料カスタマイズ -->
  21.  

商品画面。
/data/Smarty/templates/default/admin/products/product.tpl
「* 送料の個別指定は次期開発で追加予定 」のところを次期開発を待たずにカスタマイズしてやる。
  1. $arrForm.stock_unlimited == "1"}-->checked<!--{/if}--> onclick="fnCheckStockLimit('<!--{$smarty.const.DISABLED_RGB}-->');"/>無制限</td>
  2. </td>
  3. </tr>
  4. <!--{/if}-->
  5.  
  6. <tr class="fs12n">
  7. <td bgcolor="#f2f1ec" width="160">商品送料</td>
  8. <td bgcolor="#ffffff" width="557">
  9. <span class="red12"><!--{$arrErr.deliv_fee}--></span>
  10. <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>
  11. <!--{if $smarty.const.OPTION_PRODUCT_DELIV_FEE != 1}--><br /><span class="attention">※現在無効です</span> (パラメータ OPTION_PRODUCT_DELIV_FEE)<!--{/if}--> </td></tr>
  12.  

続いてロジックの修正

/data/class/SC_CartSession.php
Line348のgetAllProductsDelivFeeメソッドをコメントアウト。削除でもいいけど。
  1. /*** コメントアウト @送料拡張用 2009.05.07
  2.   // 全商品の合計送料
  3.   function getAllProductsDelivFee() {
  4.   // ポイント合計
  5.   $total = 0;
  6.   $max = $this->getMax();
  7.   for($i = 0; $i <= $max; $i++) {
  8.   $deliv_fee = $_SESSION[$this->key][$i]['deliv_fee'];
  9.   $quantity = $_SESSION[$this->key][$i]['quantity'];
  10.   $total+= ($deliv_fee * $quantity);
  11.   }
  12.   return $total;
  13.   }
  14. **/
  15.  

/data/class/helper/SC_Helper_DB.php
Line1420のsfTotalConfirm()メソッドの中を修正。
Line14391~
  1. // 商品ごとの送料が有効の場合
  2. if (OPTION_PRODUCT_DELIV_FEE == 1) {
  3. // $arrData['deliv_fee']+= $objCartSess->getAllProductsDelivFee();
  4. // 全商品の合計数量を算出する @送料カスタマイズ 2009.05.07
  5. $this->lfAddAllProductsDelivFee($arrData, $objPage, $objCartSess);
  6. }
  7.  
Line1446~
  1. // 配送業者の送料が有効の場合
  2. if (OPTION_DELIV_FEE == 1) {
  3. // 送料の合計を計算する
  4. //$arrData['deliv_fee']
  5. // += $this->sfGetDelivFee($arrData['deliv_pref'],
  6. // $arrData['payment_id']);
  7. // 都道府県、支払方法から配送料金を加算する @送料カスタマイズ 2009.05.07
  8. $this->lfAddDelivFee($arrData);
  9. }
  10.  
ファイルの最後にメソッドを3つ追加。
  1. /***
  2.   * 全商品の合計数量を加算する
  3.   * @送料カスタマイズ 2009.05.07
  4.   * @author y-nakajima
  5.   ***/
  6. function lfAddAllProductsDelivFee(&$arrData, &$objPage, &$objCartSess) {
  7. $arrData['deliv_fee'] += $this->lfCalcAllProductsDelivFee($arrData, $objCartSess);
  8. }
  9.  
  10. /***
  11.   * 全商品の合計送料を加算する
  12.   * @送料カスタマイズ 2009.05.07
  13.   * @author y-nakajima
  14.   * @return 全商品の合計送料
  15.   ***/
  16. function lfCalcAllProductsDelivFee(&$arrData, &$objCartSess){
  17. $objQuery = new SC_Query();
  18. $deliv_fee_total = 0;
  19. $max = $objQuery->getMax();
  20. for($i = 0; $i <= $max; $i++){
  21. // 商品送料
  22. $deliv_fee = $objQuery->getOne('SELECT deliv_fee FROM dtb_products WHERE product_id = ?',
  23. array($_SESSION[$objCartSess->key][$i]['id'][0]));
  24. // 数量
  25. $quantity = $_SESSION[$objCartSess->key][$i]['quantity'];
  26. // 累積
  27. $deliv_fee_total += $deliv_fee * $quantity;
  28. }
  29. return $deliv_fee_total;
  30. }
  31.  
  32. /***
  33.   * 都道府県、支払方法から配送料金を加算する
  34.   * @送料カスタマイズ 2009.05.07
  35.   * @author y-nakajima
  36.   ***/
  37. function lfAddDelivFee(&$arrData){
  38. $arrData['deliv_fee'] += $this->sfGetDelivFee($arrRet);
  39. }
  40.  

これでいいはず。
最終更新:2009年05月07日 17:40
ツールボックス

下から選んでください:

新しいページを作成する
ヘルプ / FAQ もご覧ください。