バージョン選択

フォーラム

メニュー

オンライン状況

51 人のユーザが現在オンラインです。 (40 人のユーザが フォーラム を参照しています。)
登録ユーザ: 1
ゲスト: 50
tattsu もっと...

サイト内検索

質問 > その他 > 一番高い送料を適用したい

その他

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
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円で登録してください。


----------------
EC-CUBEカスタマイズ・高速化・脆弱性対策・SEO ご相談ください。

2系・3系から4系へのバージョンアップ実績豊富

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); //追加



このような形でうまくいくことが出来ましたが、おかしなところありますでしょうか?

ご指導いただけたら幸いです。
お忙しい中恐縮ですが、よろしくお願いいたします。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


EC-CUBE公式 Amazon Payプラグイン

統計情報

総メンバー数は88,704名です
総投稿数は109,948件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1638
8
red
1570
9
mcontact
1285
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
799
14 ramrun 789
15 karin 689
16 sumida 641
17
homan
633
18 DELIGHT 572
19
patapata
502
20
flealog
485


ネットショップの壺

EC-CUBEインテグレートパートナー

Copyright© EC-CUBE CO.,LTD. All Rights Reserved.