質問 > フロント機能 > EC CUBE3.0で送料の計算方法をカスタマイズしたい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
madoka |
投稿日時: 2017/1/31 16:09
対応状況: −−−
|
半人前 登録日: 2016/2/15 居住地: 投稿: 23 |
EC CUBE3.0で送料の計算方法をカスタマイズしたい はじめまして、EC CUBE初心者です。
送料計算のカスタマイズについて教えていただきたいのですが、 各商品毎に個別送料を設定し、各都道府県別でも送料を設定しています。 これを、商品価格+個別送料+地域別送料×個数としたいのですが、どうやっても計算がおかしくなってしまい実現できずにいます。 ↓このように書いてみたのですが、複数の商品が入ると計算がおかしくなってしまいます。 // 商品ごとの配送料合計 $productDeliveryFeeTotal = 0; if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) { $productDeliveryFeeTotal = $ProductClass->getDeliveryFee() * $quantity; } $Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() * $quantity + $productDeliveryFeeTotal); これも試しましたが、計算が合いませんでした。 // 商品ごとの配送料合計 $productDeliveryFeeTotal = 0; if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) { $productDeliveryFeeTotal = $Shipping->getDeliveryFee()->getFee() * $quantity + $ProductClass->getDeliveryFee() * $quantity; } $Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal); どなたか教えていただけませんでしょうか? よろしくお願いします。 ----------------------- EC CUBE 3.0.10 PHP 5.6.21 MySQL 5.6.23 |
468 |
投稿日時: 2017/2/2 2:34
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: EC CUBE3.0で送料の計算方法をカスタマイズしたい 具体的にどのあたりに処理を記述されていますか?
多分、似たような処理で、ShoppingService.php 639行目付近のfunction setShippingDeliveryFee() {} 辺りでは無いかと思いますが如何でしょうか? 記述いただいたソースを見ていると、$quantityに正しい情報が入っていないのではないかと思いますが如何でしょうか? 商品ごとの配送料を取得する処理のfunction getProductDeliveryFee()の中にも記述されていますが、 配送先ごとの商品の個数を参照しようと思う場合、以下のようなループが必要かと思います。
|
madoka |
投稿日時: 2017/2/2 9:38
対応状況: −−−
|
半人前 登録日: 2016/2/15 居住地: 投稿: 23 |
Re: EC CUBE3.0で送料の計算方法をカスタマイズしたい お返事、ご指摘ありがとうございます。
変更した箇所は 514行目あたりからの処理で public function getNewShipmentItem(Order $Order, Product $Product, ProductClass $ProductClass, $quantity) { の中にある $productDeliveryFeeTotal = 0; if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) { $productDeliveryFeeTotal = $ProductClass->getDeliveryFee() * $quantity; } $Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal); の部分を変更して下記のようにしました。 $productDeliveryFeeTotal = 0; if (!is_null($this->BaseInfo->getOptionProductDeliveryFee())) { $productDeliveryFeeTotal = $Shipping->getDeliveryFee()->getFee() * $quantity + $ProductClass->getDeliveryFee() * $quantity; } $Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() + $productDeliveryFeeTotal); すると、1種類の商品が数個入っている場合には意図した計算になります。 2種類以上の商品が入った場合、何故か送料が1回多く加算されてしまう感じです。 ご指摘の箇所も何度か色々変更してみたのですが、注文内容確認画面で数字の変動が見られず送料も1個分しか計算されませんでした... すぐ下の /** * お届け先ごとの送料合計を取得 * * @param $shippings * @return int */ public function getShippingDeliveryFeeTotal($shippings) { $deliveryFeeTotal = 0; foreach ($shippings as $Shipping) { $deliveryFeeTotal += $Shipping->getShippingDeliveryFee(); } return $deliveryFeeTotal; } の部分や /** * 商品ごとの配送料を取得 * * @param Shipping $Shipping * @return int */ public function getProductDeliveryFee(Shipping $Shipping) { $productDeliveryFeeTotal = 0; $shipmentItems = $Shipping->getShipmentItems(); foreach ($shipmentItems as $ShipmentItem) { $productDeliveryFeeTotal += $Shipping->getDeliveryFee()->getFee() * $ShipmentItem->getQuantity(); } return $productDeliveryFeeTotal; } の部分も変動したらわかると思って、下記のように Quantity を消してみたり foreach ($shipmentItems as $ShipmentItem) { $productDeliveryFeeTotal += $Shipping->getDeliveryFee()->getFee(); と、変更してみたのですが、やはり注文内容確認画面の数字は変動しませんでした... |
468 |
投稿日時: 2017/2/2 12:55
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: EC CUBE3.0で送料の計算方法をカスタマイズしたい 処理の流れを追ってみました。
>変更した箇所は 514行目あたりからの処理で >public function getNewShipmentItem(Order $Order, Product $Product, ProductClass $ProductClass, $quantity) 上記の変更を加えられていますが、ここに処理が来た時点で、 $Shipping->getDeliveryFee()->getFee()に配送業者別の配達料金が1度セットされているようです。 それが原因で1回分送料が多いのでは無いでしょうか? function registerPreOrder() {} の中で、 // お届け先情報を作成 $Order = $this->getNewShipping($Order, $Customer, $deliveries); ← この中でfunction setShippingDeliveryFee() {} を呼んで、その中で$Shipping->setDeliveryFee($deliveryFee);を処理しています。 // 受注明細情報、配送商品情報を作成 $Order = $this->getNewDetails($Order); ← この中でfunction getNewShipmentItem() {}を呼んでいます。 この辺を修正すれば、送料計算が上手くいくように思います。
|
madoka |
投稿日時: 2017/2/2 16:24
対応状況: −−−
|
半人前 登録日: 2016/2/15 居住地: 投稿: 23 |
Re: EC CUBE3.0で送料の計算方法をカスタマイズしたい ご教授ありがとうございます。
ご指摘いただいた通り、1度セットされている感じでしたので、 教えていただいた場所を探して function setShippingDeliveryFee にあった1行を修正したら無事計算があいました! ありがとうございました。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |