都道府県別重量別の送料計算

前バージョンの改造を参考に改造します。
このバージョンの複数発送には対応しません。
管理画面?システム設定?パラメタ設定で別のお届け先最大登録数
DELIV_ADDR_MAX に0を設定します。

商品送料を商品重量に変更する
data/Smarty/templates/admin/products/confirm.tpl
132行目 商品送料→商品重量
135行目 円→g

data/class/pages/admin/products/LC_Page_Admin_Products_Product.php
320行目
$objFormParam->addParam(“商品送料”, “deliv_fee”, PRICE_LEN, ‘n’, array(“NUM_CHECK”, “SPTAB_CHECK”, “MAX_LENGTH_CHECK”));
       ↓
$objFormParam->addParam(“商品重量”, “deliv_fee”, PRICE_LEN, ‘n’, array(“EXIST_CHECK”, “NUM_CHECK”, “SPTAB_CHECK”, “MAX_LENGTH_CHECK”));

data\Smarty\templates\admin\products\product.tpl
198行目

商品送料

     ↓

商品重量 *

213行目
円→g

data/class/SC_CartSession.php

609行目付近 「配送業者の送料を加算」の次に「都道府県と重量に応じた送料を返す」を追加

// 配送業者の送料を加算
if (OPTION_DELIV_FEE == 1
   && !SC_Utils_Ex::isBlank($deliv_pref)
  && !SC_Utils_Ex::isBlank($deliv_id)) {
$results['deliv_fee'] += $objDb->sfGetDelivFee($deliv_pref, $deliv_id);
 }

   // 都道府県と重量に応じた送料を返す
   $weight = $results['deliv_fee'];
   switch ($deliv_pref[0]) {
   case 40: //福岡県
    if ($weight <= 10000) $results['deliv_fee'] = 1690;
   }

カテゴリー: System, eccube 2.11   パーマリンク

都道府県別重量別の送料計算 への15件のコメント

  1. kk より:

    ECCUBE2.11.1でネットショップを構築中ですが、重量による送料の計算が必要になり
    カスタマイズ方法をネットで検索をしておりました。

    このブログでのカスタマイズについて質問ですが、注文数量(重量)合計で送料を計算できるようになりますでしょうか。

    • nine より:

      できますよ。ここに覚書として記載している通りです。GLPなのでソースを公開しています。

      • kk より:

        公開していただいているソースは、複数配送はできないようですが、
        複数配送にした場合はどうしたら良いでしょうか。

        • nine より:

          こんにちは
          当方のシステムでは複数配送はしない設定で運用しています。

          ユーザ登録して、複数回注文すれば同じことですから、少しお客様には手間ですが、運用でカバーして頂くということで、お客様にはご納得して頂ければと思います。

  2. su より:

    有用な情報をありがとうございます。

    もし可能であればご教示いただきたいのですが、
    下記のようにカスタムしましたところ、うまく処理できません。
    重量が0ノ場合も手数料がかかってしまいます。

    // 都道府県と重量に応じた送料を返す
    $weight = $results['deliv_fee'];
    switch ($deliv_pref[0]) {
    case 47: //沖縄
    $results['deliv_fee'] = 1050;
    default: // 他
    if ($weight == 0) $results['deliv_fee'] = 0;
    if ($weight = 3000) $results['deliv_fee'] = 0;
    }

    アドバイスを頂ければ幸いです。
    宜しくお願い致します。

    • nine より:

      こんにちは

      手数料とは送料が課金されてしまうと言われていますか?
      送料の計算はswitch文で都道府県に分岐して、その中でIF文で重量別に分岐しています。
      もし、重量が0で課金されるのであれば、そのIF文がおかしいのでしょう。
      ちなみに当方のシステムでは、重量の無い商品はないので確認していません。

      • su より:

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

        申し訳ございません。おっしゃるとおり手数料とは送料のことです。
        if文を何通りか試してみたのですが、やはり重量0の場合のみ送料が加算されてしまいます。先程投稿したソースが間違っていたため再度投稿させて頂きます。

        // 都道府県と重量に応じた送料を返す
        $weight = $results['deliv_fee'];

        switch ($deliv_pref[0]) {
        case 47: //沖縄
        $results['deliv_fee'] = 1050;
        default: // 他
        if ($weight == 0 or $weight >= 3000) {
        $results['deliv_fee'] = 0;
        } else {
        $results['deliv_fee'] = 525;
        }

        }

        実現したいのは下記の条件です。

        重量0の場合は送料無料
        0<重量<3000の場合525円
        重量3000以上は無料

        恐縮ではございますが、アドバイスいただけると大変助かります。
        宜しくお願い申し上げます。

        • nine より:

          文章に書いてる通りのif文を書けばいいのではないですか?

          重量がゼロの時は何円課金されるか?と、自分の書いたロジックを見てみると、どこの処理が動いているのかわかります。
          どこの処理が動いているのかわからなければ、分かるような金額を入れて動かして見て下さい。

          ま、条件の書き方で上手く動かない事がほとんどです。

          コンピュータと言うのは、書いたロジック通りにしか動かないですから‥

        • nine より:

          もう少し詳しく書きますと、プロクラミングと言うのは、考えている事をそのまま書けば良いだけです。

          まず、送料にゼロ円を入れます。
          次のステップで、ゼロgより大きいなら525円を送料にいれます。
          次のステップで、3000gより大きいなら、送料にゼロ円を入れます。

          文章で書いている物に=は出て来てませんよね
          だから、ロジックの中に==の判断がある事自体、間違いです。

          書いている通りをロジックに書けば良いだけです。

          こんな感じでしょうか・・

          $results['deliv_fee'] = 0;
          if ($weight > 0) $results['deliv_fee'] = 525;
          if ($weight > 3000) $results['deliv_fee'] = 0;

          でも、上記の場合は3000グラムより大きい場合が0円です。
          3000グラム以上なら

          $results['deliv_fee'] = 0;
          if ($weight > 0) $results['deliv_fee'] = 525;
          if ($weight > 2999) $results['deliv_fee'] = 0;

          と、書かないといけません。

          すいません、新人などに話す口調になります。
          職業病です。ご了承ください。

          • su より:

            nine様
            ご返信ありがとうございます!

            また貴重なアドバイスを頂き大変勉強になります。自分は本当に初心者なのでなるほど〜とめから鱗です!

            nine様に教えて頂いた通り変更してみたのですが、やはりうまく行きません。。。
            重量ゼロの時にどうしても送料が発生してしまいます。

            変更したソースは下記の通りです。

            // 都道府県と重量に応じた送料を返す
            $weight = $results['deliv_fee'];
            switch ($deliv_pref[0]) {
            case 47: //沖縄
            $results['deliv_fee'] = 1050;
            default: // 他
            $results['deliv_fee'] = 0;
            if ($weight > 0) $results['deliv_fee'] = 525;
            if ($weight > 2999) $results['deliv_fee'] = 0;
            }

            何度も大変申し訳ないのですが、
            間違っているところなどございますでしょうか?
            ご教示頂ければ幸いです。
            よろしくお願いいたします。

          • nine より:

            ま、沖縄を選んでも1050円にはならない気はしますが
            重量ゼロの時に送料が発生するのは、ここのロジックではありえないと思います。

            送料って、いくらになるのでしょうか?
            都道府県はどこを選択していますか?

          • su より:

            ご返信ありがとうございます。
            沖縄もこのままじゃだめなんですね、、、

            送料は525円になります。
            この数字をいじるとそれにあわせて変わるので問題はここで間違いないと思うのですが、、、

          • su より:

            すいません情報不足でした。
            都道府県は東京で試しています。

            よろしくお願いいたします。

          • nine より:

            沖縄を正常に動かすには
            default: // 他
            の上に
            break;
            が必要です。

            送料が525円でちゃんと動かないのは、ここの命令が誤っているのではなくて、選択している商品の重量がゼロではないと考えるのが普通です。

            ちなみに
            if ($weight > 0) $results['deliv_fee'] = 525;
            この命令を
            if ($weight > 0) $results['deliv_fee'] = $weight ;
            と変えてみれば、送料に重量が表示されるはずです。
            これで、ゼロと思っている重量が実際はいくらになっているのかが判ります。
            今までと同じ商品、同じ東京で指定して実験してみてください。

          • su より:

            nine様

            教えて頂きましたとおり変更したところ、
            送料の部分に1000とでたので、管理画面の送料設定よりすべて送料0についに意図した通りに動くようにできました!

            配送設定が影響するとはしらず、nine様にお手間を取らせてしまい申し訳ございませんでした。

            何度も貴重なアドバイスを頂き大変感謝しております。本当にありがとうございました。
            これでようやく2.11への移行が完了できそうです。重ねてお礼申し上げます。

コメントをどうぞ

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

*


一 × 2 =

次のHTML タグと属性が使えます: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>