バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > 送料無料の際に、北海道・沖縄を無料ではなく値引きをしたい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
rastars
投稿日時: 2019/3/29 14:40
対応状況: 解決済
新米
登録日: 2015/9/30
居住地:
投稿: 8
送料無料の際に、北海道・沖縄を無料ではなく値引きをしたい
▼テンプレート
[EC-CUBE] 3.0.17
[レンタルサーバ] エックスサーバ
[PHP] 7.1.18
[データベース] MySQL 5.7.16


「1万円以上送料無料」の設定をしているのですが、「1万円以上送料 800円値引き」にしたい。

または、本州は「1万円以上送料無料」北海道と沖縄は「1万円以上で通常送料から800円値引き」をしたいと思っております。



「1万円以上送料 800円値引き」に関しては【ご注文内容のご確認】ページを開いたタイミングでは-800円された送料が記載されているのですが、支払方法を変更すると-800の表記になってしまい、それ以降どれを選択しても-800表記になってしまいます。



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





「1万円以上送料無料」の設定をしているのですが、北海道と沖縄は通常送料から800円値引きにしたい。に関してはこちらの記事を参考にしたのですが希望の動きにならず詰まってしまっています。。
https://xoops.ec-cube.net/modules/newbb/viewtopic.php?viewmode=flat&order=ASC&topic_id=20910&forum=10


【ご注文内容のご確認】ページを開いたタイミングでは、設定した送料が記載されており、
北海道と沖縄に関しては、支払方法を変更するたびに送料が-800円ずつ引かれていき、本州に関しては1万円以上かごに入れても送料無料表記になりません。


/**
* 配送料無料条件(合計金額)の条件を満たしていれば配送料金を0に設定
*
* @param Order $Order
*/
public function setDeliveryFreeAmount(Order $Order)
{

// 配送先都道府県情報を取得。
$Shippings = $Order->getShippings();
$Shipping = $Shippings[0];
$prefId = $Shipping->getPref()->getId();


    // 配送料無料条件(合計金額)
     $deliveryFreeAmount = $this->BaseInfo->getDeliveryFreeAmount();
     if (!is_null($deliveryFreeAmount)) {
     // 合計金額が設定金額以上であれば送料無料
     if ($Order->getSubTotal() >= $deliveryFreeAmount) {


// 北海道・沖縄
if (in_array($prefId, array(1,47))) {
$Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() - 800);
}
// それ以外
} else {
         $Order->setDeliveryFeeTotal(0);
         // お届け先情報の配送料も0にセット
         $shippings = $Order->getShippings();
         foreach ($shippings as $Shipping) {
         $Shipping->setShippingDeliveryFee(0);
}
}
}
}




テンプレートを弄る程度の知識しかない為、これ以上どうすればいいのか分かりません。

お手数おかけしますがどのように変更すればよいかご教示いただけますでしょうか。
どうぞよろしくお願いいたします。

468
投稿日時: 2019/4/1 8:38
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: 送料無料の際に、北海道・沖縄を無料ではなく値引きをしたい
支払方法を切り替えた時の処理を確認すると、
配送料については最初から再計算するのではなく、
切替前の送料を利用して処理をしているようですね。
(送料無料判定は処理されているようです。その為、切り替える都度-800円されるのだと思います)
/src/Eccube/Controller/ShoppingController.php 448行目 function payment()

配送業者を変更した時に処理されるfunction delivery()を確認すると配送料をイチから再計算してると思われますので、
383行目~406行目までの記述が参考となりそうです。
($shippings = $data['shippings'];以下の記述)

あと、北海道・沖縄の判定ですが、
{}の数がおかしいと思います。
ここは一度、再確認されたほうがよいかと思います。
提示いただいたソースでは、elseが「合計金額が設定金額以上であれば送料無料 以外」の意味となっており、
設定金額未満の時に送料が常に0になるかと思います。
// 合計金額が設定金額以上であれば送料無料
if ($Order->getSubTotal() >= $deliveryFreeAmount) {
    // 北海道・沖縄
    if (in_array($prefId, array(1,47))) {
        $Shipping->setShippingDeliveryFee($Shipping->getShippingDeliveryFee() - 800);
    }
// それ以外
} else {
    $Order->setDeliveryFeeTotal(0);
    // お届け先情報の配送料も0にセット
    $shippings = $Order->getShippings();
    foreach ($shippings as $Shipping) {
        $Shipping->setShippingDeliveryFee(0);
    }
}


----------------
株式会社シロハチ
■ECCUBE2系、3系構築カスタマイズご相談ください。
EC-CUBE3マニュアル
blog

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

1
seasoft
7365
2
468
3217
3
AMUAMU
2712
4
nanasess
2303
5
umebius
2085
6
yuh
1818
7
h_tanaka
1610
8
red
1568
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.