バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > EC-CUBE3で購入金額ごとに送料値引き・無料にしたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
akiakihi
投稿日時: 2019/6/1 21:21
対応状況: −−−
一人前
登録日: 2014/7/17
居住地: 兵庫県
投稿: 91
EC-CUBE3で購入金額ごとに送料値引き・無料にしたい
▼テンプレート
[EC-CUBE] 3.0.17
[レンタルサーバ]さくらインターネット
[OS] Windows10
[PHP] PHP Version 7.2.17
[データベース] MySQL 5.7
[ブラウザ] Chrome

税込み
・3239円未満:送料値引きなし
・3240円以上はクリックポスト(delivery_id:3; 185円)無料

・3240~7559は送料200円引き
・7560円以上はレターパックプラス(delivery_id:4; 510円)無料

・7560~17999円は送料510円引き
・18000円以上はゆうパック(delivery_id:5;)無料

としたいと思っています。
EC-CUBE2系では出来ていたので参考にしてみたのですが、3系で下記のように書くとエラーになってしまいます。



/src/Eccube/Service/ShoppingService.php 683行目付近
------------------------------------------------------------------

public function setDeliveryFreeAmount(Order $Order)
{
// 配送料無料条件(合計金額)
$deliveryFreeAmount = $this->BaseInfo->getDeliveryFreeAmount();
if (!is_null($deliveryFreeAmount)) {
// 合計金額が設定金額以上であれば送料無料
if ($Order->getSubTotal() <= 3000) {
$Order->setDeliveryFeeTotal(0);
}else if ($Order->getSubTotal() <= 6999) {
if($deliv_id==3 ) $Order->setDeliveryFeeTotal(0);
if($deliv_id==4 ) $Order->setDeliveryFeeTotal(-200);
}else if ($Order->getSubTotal() <= 16666) {
if($deliv_id==3 ) $Order->setDeliveryFeeTotal(0);
if($deliv_id==4 ) $Order->setDeliveryFeeTotal(0);
if($deliv_id==5 ) $Order->setDeliveryFeeTotal(-510);
}else{
$Order->setDeliveryFeeTotal(0);



// お届け先情報の配送料も0にセット
$shippings = $Order->getShippings();
foreach ($shippings as $Shipping) {
$Shipping->setShippingDeliveryFee(0);
}
}
}
}

----------------------------------------------------------------------

エラーコード

Notice: Undefined variable: deliv_id in /***/src/Eccube/Service/ShoppingService.php on line 699

Notice: Undefined variable: deliv_id in /***/src/Eccube/Service/ShoppingService.php on line 700

Notice: Undefined variable: deliv_id in /***/src/Eccube/Service/ShoppingService.php on line 701

Warning: count(): Parameter must be an array or an object that implements Countable in /***/app/Plugin/Point/Helper/PointCalculateHelper/PointCalculateHelper.php on line 282


お忙しいところを大変恐縮ですが、
どのように記述したら良いか、ご指導願えませんでしょうか。
よろしくお願いいたします。
umebius
投稿日時: 2019/6/2 0:56
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: EC-CUBE3で購入金額ごとに送料値引き・無料にしたい
とりあえず$deliv_id(配送方法のID)が未定義ではエラーは免れないので

$Shipping = $Order->getShippings()->first();
$deliv_id = $Shipping->getDelivery()->getId();

のような形で$deliv_idを取得してはどうでしょうか。

上記は複数配送不可設定の場合の話で、
複数配送可の場合は$Shipping をforeachでループさせて配送単位で送料を考える必要が出てくるかと思います。


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

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

akiakihi
投稿日時: 2019/6/2 1:39
対応状況: 解決済
一人前
登録日: 2014/7/17
居住地: 兵庫県
投稿: 91
Re: EC-CUBE3で購入金額ごとに送料値引き・無料にしたい
ありがとうございます!

複数配送は不可設定にしております。

おかげさまで、無事にエラーが出ずに値引きがされるようになりました。

助かりました。ありがとうございましたm(_ _)m


ちなみに、一番下のポイントプラグインのエラーについては、PHP7.2にしているからのようです。
付与率の設定がされていない場合は、という内容でしたので、該当部分をコメントアウトで対応しました。
umebius
投稿日時: 2019/6/2 2:00
対応状況: −−−
登録日: 2016/7/22
居住地:
投稿: 2085
Re: EC-CUBE3で購入金額ごとに送料値引き・無料にしたい
解決されたようで何よりです。
また何かございましたらご投稿ください。
akiakihi
投稿日時: 2019/6/16 1:36
対応状況: −−−
一人前
登録日: 2014/7/17
居住地: 兵庫県
投稿: 91
Re: EC-CUBE3で購入金額ごとに送料値引き・無料にしたい
こんにちは

うまく金額が表示されないので、お手数ですがまた教えていただけますでしょうか。

現状、下記のコードで運用していますが、
最初にデフォルトで配送方法としてクリックポストが選択されており、購入金額が3000円以上の場合は0円、3000円以下の場合送料は185円、と記載されています。

そこから、どの配送方法に変更しても送料金額は変わらず、
次に支払い方法を選んだ際にはじめて、レターパックと定形外郵便については正しい送料に変更されるのですが、
ゆうパックについては、送料がデフォルト表示のままで変わりません。

これを、はじめに配送方法は触らず、支払い方法を先に選ぶと、どの送料も正しく表示されます。

また一旦正しい金額になると、以後 配送方法を変更しても、送料はそれぞれ配送法に応じた正しい金額が表示されるようになります。
(値引きもきちんとされています)


購入時、画面の表示に従って、最初に発送方法でゆうパックを選び、次に支払い方法を選択してそのまま決済されると、送料が0円もしくは185円のままになってしまいます


お忙しいところを恐縮ですが、解決策についてご教授いただけませんでしょうか


($deliv_id==1と2はサンプル業者(DBで削除できずそのまま))

$deliv_id==3 :クリックポスト(一律185円)←デフォルト表示
$deliv_id==4 レターパックプラス(一律510円)
$deliv_id==5 ゆうパック(都道府県により異なる)
(見にくいので下記コードから抜いていますが、他に$deliv_id==6として定形外を設定しています。)


    public function setDeliveryFreeAmount(Order $Order)
    {
        // 配送料無料条件(合計金額)
        $Shipping = $Order->getShippings()->first();
		$deliv_id = $Shipping->getDelivery()->getId();
        $deliveryFreeAmount = $this->BaseInfo->getDeliveryFreeAmount();
        if (!is_null($deliveryFreeAmount)) {
            // 合計金額が設定金額以上であれば送料無料
			 if ($Order->getSubTotal() <= 3000) {
           	    if($deliv_id==3 ) $Order->setDeliveryFeeTotal(185);
           	    if($deliv_id==4 ) $Order->setDeliveryFeeTotal(510);
           	    if($deliv_id==5 ) $Order->setDeliveryFeeTotal($Order->getDeliveryFeeTotal());           	               	    
           }else if ($Order->getSubTotal() <= 6999) {
           	    if($deliv_id==3 ) $Order->setDeliveryFeeTotal(0);           	    
           	    if($deliv_id==4 ) $Order->setDeliveryFeeTotal(310);
           	    if($deliv_id==5 ) $Order->setDeliveryFeeTotal($Order->getDeliveryFeeTotal() - 200);           	    
           }else if ($Order->getSubTotal() <= 16666) {
           	    if($deliv_id==3 ) $Order->setDeliveryFeeTotal(0);           	    
           	    if($deliv_id==4 ) $Order->setDeliveryFeeTotal(0);             	    
           	    if($deliv_id==5 ) $Order->setDeliveryFeeTotal($Order->getDeliveryFeeTotal() - 510);
           }else{
           		$Order->setDeliveryFeeTotal(0);
           	
 
                // お届け先情報の配送料も0にセット
                $shippings = $Order->getShippings();
                foreach ($shippings as $Shipping) {
                    $Shipping->setShippingDeliveryFee(0);
                }
            }
        }
    }
akiakihi
投稿日時: 2019/6/16 21:01
対応状況: −−−
一人前
登録日: 2014/7/17
居住地: 兵庫県
投稿: 91
Re: EC-CUBE3で購入金額ごとに送料値引き・無料にしたい
根本的な解決となっていませんが、とりあえず、の打開策として、
shopping.twigにて、支払い方法を先に選択→その後、配送方法を選択するような順番にすることで問題は回避されました。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1567
9
mcontact
1240
10
tsuji
958
11
fukap
907
12
shutta
835
13
tao_s
796
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.