- 追加された行はこの色です。
- 削除された行はこの色です。
> [[EC-CUBEカスタマイズ]]
> [[EC-CUBEメモ]] > [[EC-CUBEカスタマイズ]]
* ECCUBEカスタマイズ - 数量毎に送料を追加する [#f6bbce48]
#setlinebreak(on);
以下、ECCUBE ver 3.0.15 にて動作確認。
ここでは、商品マスタに「送料の課金単位」を表す項目(packing_num)を追加し、この数量単位で送料がかかるように改修する。
ここでは、商品マスタに、配送時の梱包単位を表す項目(packing_num)を追加し、この数量単位に送料がかかるように改修する。
例えば、
送料が 1,000 円の場合、送料の課金単位が5の商品を6個購入した場合は、送料が 2000円となるようにする。
尚、送料課金単位が未設定の商品は、通常の送料計算を行う事にする。(何個購入しても1000円)
&br;
#contents
-- 関連
--- [[EC-CUBEカスタマイズ]]
** テーブルへのカラム追加 [#ce1f674f]
#html(<div style="padding-left:10px;">)
まずは、商品マスタに項目を追加
#myterm2(){{
alter table dtb_product add packing_num int(11) default null;
}}
#html(</div>)
** エンティティクラスへの項目追加 [#ed97fc8f]
#html(<div style="padding-left:10px;">)
src/Eccube/Entity/Product.php
#mycode2(){{
+ /**
+ * @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;
+ }
}}
#html(</div>)
** doctrineのDB定義にカラム追加 [#h32f2e7c]
#html(<div style="padding-left:10px;">)
src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml
#mycode2(){{
type: smallint
nullable: true
unsigned: false
+ packing_num:
+ type: smallint
+ nullable: true
+ unsigned: false
manyToOne:
Creator:
targetEntity: Eccube\Entity\Member
}}
#html(</div>)
** 管理画面用のフォーム定義に項目追加 [#rd88f1f0]
#html(<div style="padding-left:10px;">)
src/Eccube/Form/Type/Admin/ProductType.php
#mycode2(){{
))
+ ->add('packing_num', 'text', array(
+ 'label' => '送料単位',
+ 'required' => false,
+ ))
;
}
}}
#html(</div>)
** 管理画面(商品登録画面)への項目追加 [#ueecd43e]
#html(<div style="padding-left:10px;">)
src/Eccube/Resource/template/admin/Product/product.twig
#mycode2(){{
</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>
}}
#html(</div>)
** 商品詳細ページに注記の表示 [#ec4d5fb7]
#html(<div style="padding-left:10px;">)
app/template/default/Product/detail.twig
#mycode2(){{
+ {# 送料単位 #}
+ {% if Product.packing_num is not null %}
+ <div class="">※{{ Product.packing_num }}個毎に送料がかかります。</div>
+ {% endif -%}
}}
#html(</div>)
** 送料計算ロジックの修正 [#p1c86239]
#html(<div style="padding-left:10px;">)
src/Eccube/Service/ShoppingService.php
#mycode2(){{
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;
}
}}
#html(</div>)
#todo(管理画面で送料再計算時の対応)