カレッヂ |
質問者 片山
投稿日 2/3(月) 16:46:58
■改造したいこと■ v6をベースに [小計が10000円以上の場合:送料無料] の改造はお陰様で出来ましたが、さらに [ある特定商品の購入合計が、4000円以上の場合も:送料無料] にしたい、と考えております。 ■改造プラン■ A)商品名(_gname) の語頭に判別文字を付け(例:*:)、その接頭文字商品は普通の会計 とは別に、特別会計$FEE_SPECIAL を設定する B)商品価格(_gfee) とは別にもうひとつ <input type="hidden" name="feexx" value="特別商品">を記述 $FEE_SPECIAL += $feexx 以上どちらか設定した上で、 「すべての入力を確認する画面」の項、送料書出で if ($in{'_area'} =~ /(.*):(.+)$/) { $area = $1; $soryo = $2; } のあとに if ($SHOKEI >= 10000) { $soryo = 0; } ←これを追加 elseif ($FEE_SPECIAL >= 4000) { $soryo = 0; } ←これを追加 ここ数日やっと買った参考書を見つつ、A)は連想配列から特定の文字情報だけ抽出 することができるのか? と考えていたところ、数日前の重量によって送料変更の やりとりを拝見、B)の方が素直かと考えています。今年になってCGI勉強中なので 的外れでしたら、恐縮です。ご指導よろしくお願いいたします。
プロバイダ参照: |
回答者 呑兵衛@大阪
[削除]
投稿日 2/3(月) 21:56:06
動かしてみてだめならもう一度ご質問を。 > elseif ($FEE_SPECIAL >= 4000) { $soryo = 0; } ←これを追加 typo です。elsif |
質問者 片山
[削除]
投稿日 2/5(水) 14:13:00
B)だと自分でも改造できそうと考えて、トライしましたが、うまく行きませんでした。 下記のような改造をしてみたのですが。$feexx が認識されていないのでしょうか。 いかがでしょうか? ---- 商品価格(_gfee) とは別にもうひとつ <input type="hidden" name="_gfeexx" value="特別商品の値段">を記述 sub mado と sub cfm で ($code,$name,$fee) = split(/\t/,$_,3); があるのでこれを ($code,$name,$fee,$feexx) = split(/\t/,$_,4); と変更し $FEE_SPECIAL += $feexx としました。 sub input_to_cart で $FEE_SPECIAL = $in{'_gfeexx'}*{in{'_kazu'}; としました。 「すべての入力を確認する画面」の項、送料書出で if ($in{'_area'} =~ /(.*):(.+)$/) { $area = $1; $soryo = $2; } のあとに if ($SHOKEI >= 10000) { $soryo = 0; } elsif ($FEE_SPECIAL >= 4000) { $soryo = 0; } ←この2行を追加 ---- |
回答者 呑兵衛@大阪
[削除]
投稿日 2/5(水) 18:50:47
「特定**」を取り出す方法はいくつもあります。 <input type="hidden" name="_gfeexx" value="特別商品の値段"> よりも <input type=hidden name="_gname" value="商品名_S"> とでもしておいて ^^ sub input_to_cart は触らず sub mado と sub cfm で foreach (@CARGO) { ($code,$name,$fee) = split(/\t/,$_,3); if ($DELETED{$code}) { next; } if ($name =~ /_S$/) { $name =~ s/_S$//g; $FEE_SPECIAL = $fee++; } $SHOKEI += $fee; # 累計 ($fee,$fee2) = &comma($fee); で特別商品だけの値段、$FEE_SPECIAL、を取り出すことができます。 このとき $SHOKEI は買物総額自体変わりません。 |
質問者 片山
[削除]
投稿日 2/6(木) 19:11:37
あ〜、なるほど。ご教授いただいた式をリファレンス片手にその意味/仕掛けを 理解しようと頑張っております。どうもありがとうございます。 しかし、なぜか、うまく行かないのです。何度かチェックをくり返しているのですが。 sub mado と sub cfm で if ($name =~ /_S$/) { $name =~ s/_S$//g; $FEE_SPECIAL = $fee++; } それと、sub cfm で if ($in{'_area'} =~ /(.*):(.+)$/) { $area = $1; $soryo = $2; } のあとに if ($SHOKEI >= 10000) { $soryo = 0; } elsif ($FEE_SPECIAL >= 4000) { $soryo = 0; } の3箇所だけ、今の所、追加しております。 ほんとにスミマセンが、よろしくお願いいたします。 |
回答者 呑兵衛@大阪
[削除]
投稿日 2/7(金) 00:53:06
Mistake! 申し訳ない! if ($name =~ /_S$/) { $name =~ s/_S$//g; $FEE_SPECIAL = $fee++; } は if ($name =~ /_S$/) { $name =~ s/_S$//g; $FEE_SPECIAL += $fee; } |
質問者 片山
[削除]
投稿日 2/13(木) 13:58:50
呑兵衛さま、ご回答ありがとうございました。 あれから、1週間あれこれと試行錯誤しましたが、依然としてうまく行かず、 ヒントが何かいただけないかと、また(しつこくてすみません)質問する次第です。 2/6 の質問のとおり、 オリジナル CART.CGI に3箇所追加 if ($name =~ /_S$/) { $name =~ s/_S$//g; $FEE_SPECIAL += $fee; } に変更 「_S」が末尾についた商品を4000円以上購入しても、送料0円にならない状態です。 どうしたもんでしょうか? お忙しいところ、恐縮ですが、ご指南お願いいたします。 |
回答者 呑兵衛@大阪
[削除]
投稿日 2/13(木) 17:19:54
期待通りになりませんでしたねぇ。カスタマイズ版でやってたので間違ってました。 /_S$/ の文字列のケツという $ が余計でした。 sub mado で $SHOKEI += $fee; # 累計 $name =~ s/_S//g; #表示だけなので sub cfmで $SHOKEI += $fee; # 累計 if ($name =~ /_S/) { $name =~ s/_S//g; $FEE_SPECIAL .= $fee; } #_S のついたものに限定するため ラベル=if が必要 if ($in{'_area'} =~ /(.*):(\d+)$/) { $area = $1; $soryo = $2; } if ($FEE_SPECIAL >= 5000) { $soryo = 0; } |
質問者 片山
[削除]
投稿日 2/13(木) 19:27:24
完璧です! 永くおつきあい頂き、ありがとうございました。 頂いたこの数式をじっくりと吟味します。もっと勉強しなくては。 |
このページは終了したので返信(回答)は書きこめません
Web裏技 |