以下、ECCUBE ver 3.0.15 にて動作確認。
ここでは、商品マスタに「送料の課金単位」を表す項目(packing_num)を追加し、この数量単位で送料がかかるように改修する。
例えば、
送料が 1,000 円の場合、送料の課金単位が5の商品を6個購入した場合は、送料が 2000円となるようにする。
尚、送料課金単位が未設定の商品は、通常の送料計算を行う事にする。(何個購入しても1000円)
まずは、商品マスタに項目を追加
alter table dtb_product add packing_num int(11) default null;
src/Eccube/Entity/Product.php
+ /** + * @var integer + */ + private $packing_num; + + /** + * Get packing_num. + * + * @return integer + */ + public function getPackingNum()} + return $this->packing_num; + } + + /** + * Set packing_num. + * + * @param integer packingNum + * @return \Eccube\Entity\Product + */ + public function setPackingNum($packingNum)} + $this->packing_num = $packingNum; + return $this; + }
src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml
type: smallint nullable: true unsigned: false + packing_num: + type: smallint + nullable: true + unsigned: false manyToOne: Creator: targetEntity: Eccube\Entity\Member
src/Eccube/Form/Type/Admin/ProductType.php
)) + ->add('packing_num', 'text', array( + 'label' => '送料単位', + 'required' => false, + )) ; }
src/Eccube/Resource/template/admin/Product/product.twig
</div> </div> + {# 送料単位 #} + <div id="detail_box__packing_num" class="form-group"> + {{ form_label(form.packing_num) }} + <div id="detail_box__packing_num" class="col-sm-3 col-lg-3"> + <div class="input-group"> + {{ form_widget(form.packing_num) }} + <span class="input-group-addon">個毎に送料課金</span> + </div> + {{ form_errors(form.packing_num) }} + </div> + </div>
app/template/default/Product/detail.twig
+ {# 送料単位 #} + {% if Product.packing_num is not null %} + <div class="">※{{ Product.packing_num }}個毎に送料がかかります。</div> + {% endif -%}
src/Eccube/Service/ShoppingService.php
public function getShippingDeliveryFeeTotal($shippings) { $deliveryFeeTotal = 0; $deliveryFeeTotal = 0; foreach ($shippings as $Shipping) { + //$deliveryFeeTotal += $Shipping->getShippingDeliveryFee(); + // 商品数量毎の配送料設定対応 - START + $ShippingDeliveryFee = $Shipping->getShippingDeliveryFee(); + + $weight = 0; + $ShipmentItems = $Shipping->getShipmentItems(); + foreach ($ShipmentItems as $ShipmentItem) { + $Quantity = $ShipmentItem->getQuantity(); + $Product = $ShipmentItem->getProduct(); + $PackingNum = $Product->getPackingNum(); + if ($PackingNum != null && $PackingNum > 0) { + $weight += $Quantity / $PackingNum; + } + } + + $weight = $weight == 0 ? 1 : $weight; + $deliveryFeeTotal += $ShippingDeliveryFee * ceil($weight); + // 商品数量毎の配送料設定対応 - END } return $deliveryFeeTotal; }