質問 > その他 > 一番高い送料を適用したい |
その他
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
chapp_b32 |
投稿日時: 2020/12/3 19:32
対応状況: −−−
|
半人前 登録日: 2020/11/13 居住地: 投稿: 22 |
一番高い送料を適用したい ▼テンプレート
[EC-CUBE] [レンタルサーバ] Xserver [OS] [PHP] 7.4 [データベース] MySQL [WEBサーバ] [ブラウザ] [プラグイン] なし [カスタマイズの有無] [現象] 御世話になります。EC-CUBE4をインストールし色々試行錯誤ながら作業を進めていますが、商品毎に送料を設定し、複数の商品が購入されたとき、一番高い送料を適用にしたいのですが、ご指導いただけますでしょうか? 例えば1000円の送料の商品と、500円の送料の商品が購入されたとき、1000円を適用したいのです。 他のスレッドで似たような投稿を拝見し、色々と試してはいるのですが状況からずで、アドバイスを頂戴出来ればと投稿した次第です。 よろしくお願いいたします。 |
umebius |
投稿日時: 2020/12/4 0:14
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 一番高い送料を適用したい src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php と言うファイルで送料の計算が行われています。
その中でも商品別送料が計算されているのはこの辺りです。 https://github.com/ec-cube/EC-CUBE/blob/4.0.5/src/Eccube/Service/PurchaseFlow/Processor/DeliveryFeePreprocessor.php#L120-L128 $deliveryFeeProduct += $item->getProductClass()->getDeliveryFee() * $item->getQuantity(); と言うところで商品送料を積み上げていくよう加算されているので、そうではなくMaxのものを取得するようにしてやれば良いかと思います。 都道府県別固定送料が不要なら、計算から除外するか0円で登録してください。
|
chapp_b32 |
投稿日時: 2020/12/4 1:48
対応状況: −−−
|
半人前 登録日: 2020/11/13 居住地: 投稿: 22 |
Re: 一番高い送料を適用したい umebius様
ご親切なアドバイスをありがとうございます。感謝です。 詳細な場所と、その働きまで教えて頂き、ソースの場所を見たとき、感激さえ感じましたが、クラスやアロー演算子に慣れておらず、ご親切なご指導も虚しく、理解するまでに至っておりません。 他でも同じような問いに対して回答されていますよね。 https://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=21670&forum=2 こちらも参考にしながら、試しているのですが上手くいきません・・。 お恥ずかしながら今のソースはこんな状況です。 //$deliveryFeeProduct += $item->getProductClass()->getDeliveryFee() * $item->getQuantity(); if ($item->isDeliveryFee()) { $deliveryFeeProduct = max($deliveryFeeProducts); } > 商品送料を積み上げていくよう加算されているので とご親切にお教えいただいているにも拘らずお恥ずかしい限りですが、引き続きアドバイスを頂戴出来れば幸いです。 よろしくお願いいたします。 ■追記 ------------------------------------------ 仕組みを考えて再度以下のようなソースにしました。 $deliveryFeeArray = array(); //追加 foreach ($Order->getShippings() as $Shipping) { // 送料の計算 $deliveryFeeProduct = 0; if ($this->BaseInfo->isOptionProductDeliveryFee()) { /** @var OrderItem $item */ foreach ($Shipping->getOrderItems() as $item) { if (!$item->isProduct()) { continue; } // $deliveryFeeProduct += $item->getProductClass()->getDeliveryFee() * $item->getQuantity(); $deliveryFeeArray[] = $item->getProductClass()->getDeliveryFee() * $item->getQuantity(); //追加 } } $deliveryFeeProduct = max($deliveryFeeArray); //追加 このような形でうまくいくことが出来ましたが、おかしなところありますでしょうか? ご指導いただけたら幸いです。 お忙しい中恐縮ですが、よろしくお願いいたします。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |