バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 商品種別によって送料無料を無効にしたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
ryoharada
投稿日時: 2019/6/24 12:22
対応状況: −−−
半人前
登録日: 2019/5/17
居住地:
投稿: 15
商品種別によって送料無料を無効にしたい
▼テンプレート
[EC-CUBE] 3.0.17
[レンタルサーバ] ロリポップ
[OS] Mac OS X 10.13.6
[PHP] 7.1.5
[データベース] MySQL 5.6.23-log
[WEBサーバ] Apache
[ブラウザ] chrome
[導入プラグインの有無]チェックボックスでカテゴリー複数指定が簡単になるプラグイン、税抜き表記プラグイン、F-REGI決済プラグイン
[現象]

現在商品種別をAとBに分けて、Aは1万円以上カートに追加で送料無料、Bの方はいくら追加しても送料無料にならないように設定しています。

↓加えた変更の内容(src/Eccube/Service/ShoppingService.php)

/**
 * 配送料無料条件(合計金額)の条件を満たしていれば配送料金を0に設定
 *
 * @param Order $Order
 */
public function setDeliveryFreeAmount(Order $Order)
{
    // 商品種別を取得
    $productTypes = $this->cartService->getProductTypes();
    $productType = $productTypes[0];

    // 商品種別がBの場合送料無料にしない
    if ($productType->getId() === 2) {
        return;
    }

    // 配送料無料条件(合計金額)
    $deliveryFreeAmount = $this->BaseInfo->getDeliveryFreeAmount();
    if (!is_null($deliveryFreeAmount)) {
        // 合計金額が設定金額以上であれば送料無料
        if ($Order->getSubTotal() >= $deliveryFreeAmount) {
            $Order->setDeliveryFeeTotal(0);
            // お届け先情報の配送料も0にセット
            $shippings = $Order->getShippings();
            foreach ($shippings as $Shipping) {
                $Shipping->setShippingDeliveryFee(0);
            }
        }
    }
}




このときに、商品種別AとBの商品がカートに混在する場合以下のようにしたいのですが、これはどのようにしたら実現できますでしょうか?

種別Aが合計1万円以上カートに追加されていて、かつ種別Bもカートにある場合
→種別Bの送料のみ加算する

※種別Aが合計1万円以下のみカートにあって、かつ種別Bもカートにある場合は種別Aと種別Bの両方の送料(配送会社は別)を加算するようにはすでになっています。


ご教授お願いいたします。
tao_s
投稿日時: 2019/6/26 17:44
対応状況: −−−
仙人
登録日: 2008/8/20
居住地: 東京
投稿: 799
Re: 商品種別によって送料無料を無効にしたい
$productType = $productTypes[0];

で、商品種別ひとつしか取ってきてないのでダメだと思います。
$productTypesをforeachで回して中身にどの商品種別が含まれているか全てチェックする必要があると思います。


----------------
EC-CUBEカスタマイズ相談してください。
緊急のEC-CUBEの障害対応
EC-CUBEカスタマイズブログ

ryoharada
投稿日時: 2019/6/26 18:38
対応状況: −−−
半人前
登録日: 2019/5/17
居住地:
投稿: 15
Re: 商品種別によって送料無料を無効にしたい
tao_s様

ご返信ありがとうございます。

以下のように書き換えてみたのですが、
今現状のコードですと、種別Aの商品しかカートにない場合は1万円以上で送料無料になってくれますが、Bも混ざってしまうとAの商品が1万円以上になっても送料がAの分とBの分と両方かかるようになってしまいます。

商品種別Aが1万円以上カートに入っていて、商品種別Bも同時にカートにある場合に
Aの分は送料無料にしてBの分のみ送料を加算するようにしたいのですが、どのようにすれば良いでしょうか?

ご教授お願いいたします。


以下が今回書き換え後のコードです。
/**
 * 配送料無料条件(合計金額)の条件を満たしていれば配送料金を0に設定
 *
 * @param Order $Order
 */
public function setDeliveryFreeAmount(Order $Order)
{
    // 商品種別を取得
    $productTypes = $this->cartService->getProductTypes();

    // 商品種別がサーフボードの場合送料無料にしない
    foreach($productTypes as $productType){
        if($productType->getId() === 2){
            return;
        }
    }

    // 配送料無料条件(合計金額)
    $deliveryFreeAmount = $this->BaseInfo->getDeliveryFreeAmount();
    if (!is_null($deliveryFreeAmount)) {
        // 合計金額が設定金額以上であれば送料無料
        if ($Order->getSubTotal() >= $deliveryFreeAmount) {
            $Order->setDeliveryFeeTotal(0);
            // お届け先情報の配送料も0にセット
            $shippings = $Order->getShippings();
            foreach ($shippings as $Shipping) {
                $Shipping->setShippingDeliveryFee(0);
            }
        }
    }
}
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,709名です
総投稿数は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.