ECCUBEカスタマイズ - 数量毎に送料を追加する †以下、ECCUBE ver 3.0.15 にて動作確認。 ここでは、商品マスタに、配送時の梱包単位を表す項目(packing_num)を追加し、この数量単位に送料がかかるように改修する。 例えば、 テーブルへのカラム追加 †まずは、商品マスタに項目を追加 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; + } doctrineのDB定義にカラム追加 †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; } TODO: 管理画面で送料再計算時の対応
|