EC-CUBE 4.0.x系 商品数量毎に送料が掛かるカスタマイズ
- 2019年10月16日
- EC-CUBE
2.13.x系の時に苦労した件だが、新たにサイトを4.0.x系で制作しなおしたので、
今回もEC-CUBEでカートの中の商品数分の送料を実装する。
(商品1個が大きかったり重かったりして、商品1個毎に送料が掛かる場合を想定)
※例えば、A商品を3つ、B商品を2つ購入した場合には「配送業者別の送料×5」が掛かる時。
/src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php
を変更。
130~134行目付近、
/** @var DeliveryFee $DeliveryFee */ $DeliveryFee = $this->deliveryFeeRepository->findOneBy([ 'Delivery' => $Shipping->getDelivery(), 'Pref' => $Shipping->getPref(), ]);
の処理の後に、
// 都道府県送料 * 個数 foreach ($Shipping->getOrderItems() as $item) { $DeliveryFeeTotal = $DeliveryFee->getFee() * $item->getQuantity(); }
を追加。
さらに・・・
141~142行目の
->setPrice($DeliveryFee->getFee() + $deliveryFeeProduct) ->setQuantity(1)
の間に先ほどの関数
->setPrice($DeliveryFeeTotal + $deliveryFeeProduct)
を追加すれば完成。
参考までに130~160行目まで修正後のものを抜粋。
} } /** @var DeliveryFee $DeliveryFee */ $DeliveryFee = $this->deliveryFeeRepository->findOneBy([ 'Delivery' => $Shipping->getDelivery(), 'Pref' => $Shipping->getPref(), ]); // 都道府県送料 * 個数 foreach ($Shipping->getOrderItems() as $item) { $DeliveryFeeTotal = $DeliveryFee->getFee() * $item->getQuantity(); } $OrderItem = new OrderItem(); $OrderItem->setProductName($DeliveryFeeType->getName()) ->setPrice($DeliveryFee->getFee() + $deliveryFeeProduct) ->setPrice($DeliveryFeeTotal + $deliveryFeeProduct) ->setQuantity(1) ->setOrderItemType($DeliveryFeeType) ->setShipping($Shipping) ->setOrder($itemHolder) ->setTaxDisplayType($TaxInclude) ->setTaxType($Taxation) ->setProcessorName(DeliveryFeePreprocessor::class); $itemHolder->addItem($OrderItem); $Shipping->addOrderItem($OrderItem); } } }
どなたかのご参考になればこれ幸せ。
(2021.01.27 修正)