バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

バグ報告 > フロント機能 > [2.12.1] お届け先の指定画面で複数配送を選択し、お届け先が一箇所の場合、表示や送料計算がおかしい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
crl_sn
投稿日時: 2012/8/20 15:19
対応状況: −−−
新米
登録日: 2012/1/10
居住地:
投稿: 8
[2.12.1] お届け先の指定画面で複数配送を選択し、お届け先が一箇所の場合、表示や送料計算がおかしい
環境は、2.12.1で確認しました。
再現手順は、以下です。

・会員にて、商品を2個カートに入れる
・お届け先の指定画面にて、「複数のお届け先に送る」クリック
・お届け先の複数指定画面にて、お届け先二箇所に、商品1個ずつ設定
・ご入力内容のご確認画面まで進んだら、カート画面に戻る
・再度、お届け先の複数指定画面まで進み、お届け先一箇所に、商品を2個設定
→その次の、お支払方法・お届け時間等の指定画面の、「お届け時間の指定」が
 お届け先が一箇所なのに、二つ表示される。
 またご入力内容のご確認画面で、送料が二箇所分になっている。

以下でも再現できます。

・会員にて、商品を1個カートに入れる
・お届け先の指定画面にて、「複数のお届け先に送る」クリック
・お届け先の複数指定画面にて、任意のお届け先を選択し次へ進む
・カート画面に戻り、お届け先の複数指定画面まで進めて、先ほどとは違う住所を選択

現段階で分かっていることは、
・「複数のお届け先に送る」で、複数お届け先を選んだ場合は正常
・一箇所に送る場合は、お届け先の指定画面で「複数のお届け先に送る」をクリックせず進むと正常

つまり、「複数のお届け先に送る」を選択して、一箇所に送る場合に不具合があるようです。
非会員でも再現しました。

実際にこういう使われ方をしないかもしれませんが、送料計算がおかしくなるのは問題だと思います。


解決方法について、検討しました。(まだ解決はしていませんが・・)
以下の関数が絡んでいるのではと思っています。
(それとis_multiple?)
$objPurchase->getShippingTemp

私の方で試したのは、SC_CartSessionとSC_Helper_Purchaseの中の、isMultiple関数を必ずtrueを返すように修正しましたら、
なんとなく正常に動いていそうです。
ただ良い修正方法ではないと思いますし、その他ではどういう修正が良いかは分かっていません。

もし解決方法があれば、すみませんが教えていただけますと幸いです。

[追記]
下記のフォーラムも拝見しました。おそらく根本の原因は同じかと思われます。
ちなみに以下でも解決方法が探せませんでした。
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=11136&forum=8
soy_bean
投稿日時: 2012/9/18 4:06
対応状況: −−−
新米
登録日: 2012/8/14
居住地:
投稿: 5
Re: [2.12.1] お届け先の指定画面で複数配送を選択し、お届け先が一箇所の場合、表示や送料計算がおかしい
実際のサーバーでも異常が見られたので、WebMatrixを使ってカスタマイズなしのローカルで試したところ。

1度複数お届け先を指定したあと、送り先の数を減らして複数お届けを使って1ヵ所に送ろうとした場合に、「送料計算」や「お届け時間の指定」がおかしくなりました。

発生例1)
2つの商品を複数お届けを使い、2か所に指定した。
その後payment画面からカートに戻り商品を1つにし、
複数お届けから1ヵ所に送ろうとした。

発生例2)
2つの商品を複数お届けを使い、2か所のお届け先を指定した。
その後payment画面から戻り、multiple画面で1ヵ所に2つの商品を送ろうとした。

自分でも解決案を調べていますが送料や送り先がおかしくなっており、実際の購入の場面でも十分発生する可能性があると思うのでなにか解決策はないでしょうか。

追記)
とりあえずsessionのshippingデータが残っているのが原因だと思うので、shippingデータをリセットするようにしてます。
何か意図があって残しているのでしょうか


function saveMultipleShippings($uniqid, &$objFormParam, &$objCustomer, &$objPurchase, &$objCartSess) {
    $objQuery =& SC_Query_Ex::getSingletonInstance();
>>  unset($_SESSION['shipping']);
    $arrParams = $objFormParam->getSwapArray();
crl_sn
投稿日時: 2012/9/19 14:14
対応状況: −−−
新米
登録日: 2012/1/10
居住地:
投稿: 8
Re: [2.12.1] お届け先の指定画面で複数配送を選択し、お届け先が一箇所の場合、表示や送料計算がおかしい
スレッドを作成したものです。
soy_bean様、ご確認ありがとうございました。

本日、EC-CUBEの最新版2.12.2をダウンロードし試してみたところ、同じ現象が再現しました。
あれから私の方でこの問題の解決方法を探ったところ、以下の暫定コードで解決しそうです。

data/class_extends/helper_extends/SC_Helper_Purchase_Ex.phpに、以下のメソッドを追記


    function getShippingTemp($has_shipment_item = 'no') {
        if ($has_shipment_item !== 'no') {
            $arrReturn = array();
            foreach ($_SESSION['shipping'] as $key => $arrVal) {
                if (count($arrVal['shipment_item']) == 0) continue;
                $arrReturn[$key] = $arrVal;
            }
            return $arrReturn;
        }
        return $_SESSION['shipping'];
    }


getShippingTempが怪しいかなと思っていましたが、このメソッドはコード上では以下のように使われています。

$objPurchase->getShippingTemp();  引数がない場合
$objPurchase->getShippingTemp($this->is_multiple); 引数がある場合(true:複数配送、false:一箇所配送)

私は今までのEC-CUBEの開発の経緯がわかっていませんが、
引数がない場合は、$_SESSION['shipping']を返して、引数がある場合はshipment_itemがあるものを返すようにしないといけないと思われます。
(この理由は端折りますが、色々とソースを追ってみてそう思いました)

この修正で、問題なく動作していると思われますが、皆さんのご意見をお聞かせいただければと思います。
認識に間違いなどありましたら、ご指摘ください。

[追記]
補足ですが、暫定的に引数を「$has_shipment_item = 'no'」としましたが、
もし綺麗に修正するのであれば、呼び出し元も修正しないといけないと思っています。
またsoy_bean様のご指摘の通り、セッションあたりも怪しいかもしれません。
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

総メンバー数は88,883名です
総投稿数は110,000件です

投稿数ランキング

1
seasoft
7367
2
468
3217
3
AMUAMU
2712
4
nanasess
2313
5
umebius
2085
6
yuh
1819
7
h_tanaka
1646
8
red
1570
9
mcontact
1295
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.