バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > Shippingデータが取れない??

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
mackarel
投稿日時: 2021/7/20 15:08
対応状況: 解決済
半人前
登録日: 2018/11/2
居住地:
投稿: 24
Shippingデータが取れない??
▼テンプレート
[EC-CUBE] 3系最新
[レンタルサーバ] さくら
[PHP] 7.4

構築済みのEC-CUBEを別サーバに移管したのですが、
ShoppingController.phpでフォームを作成している箇所、
getShippingFormBuilder→ShoppingService::getShippingFormBuilder内の1071行目辺り、
$Order->setPayment($payments[0]);


Undefined offset: 0
のエラーが発生しております。
調べると、
ShoppingService::getFormPayments内の998行目で取得しているshippingsにデータが入っていないようで、それに起因して支払い方法($payments)が取得できていないようです。
(nullではなく、shippings内のcollectionの配列データがない状態)

ここは必ずデータが入っているものと思うのですが、そうじゃないケースってあるのでしょうか・・・??また、解決方法知っている方いらっしゃいましたらお助けいただければ幸いです!!

補足:
ソースやDBはまるごとコピーしたので差はないです。

エラーが発生しているのは↓このあたりです。
// 配送業者の支払方法を取得
        $payments = $this->getFormPayments($deliveries, $Order);

        //配送方法の選択によっては支払い方法がないものが選択されている状態になるため、その場合支払い方法の1つ目を設定するように。
        $isFound = false;
        foreach ($payments as $payment) {
            if ($payment->getId() == $Order->getPayment()->getId()) {
                $isFound = true;
            }
        }
        if ($isFound == false) {
            $Order->setPayment($payments[0]);
            $Order->setPaymentMethod($payments[0]->getMethod());
            $Order->setCharge($payments[0]->getCharge());
            $Order = $this->getAmount($Order);
        }

【追記】
↑↑カスタマイズしてない箇所かと思いきやカスタマイズしてる箇所でした。
行数等デフォから異なっております。

原因らしきところは↓このあたりになります。(こちらは非カスタマイズ)
public function getFormPayments($deliveries, Order $Order)
    {
        $productTypes = $this->orderService->getProductTypes($Order);

        if ($this->BaseInfo->getOptionMultipleShipping() == Constant::ENABLED && count($productTypes) > 1) {
            // 複数配送時の支払方法
            $payments = $this->app['eccube.repository.payment']->findAllowedPayments($deliveries);
        } else {
            // 配送業者をセット
            $shippings = $Order->getShippings();
            $payments = array();
            foreach ($shippings as $Shipping) {
                $paymentsShip = $this->app['eccube.repository.payment']->findPayments($Shipping->getDelivery(), true);
                if (!$payments) {
                    $payments = $paymentsShip;
                } else {
                    $payments = array_intersect($payments, $paymentsShip);
                }
            }
        }
        $payments = $this->getPayments($payments, $Order->getSubTotal());

        return $payments;
    }

468
投稿日時: 2021/7/21 12:34
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: Shippingデータが取れない??
$paymentsが空の配列になる可能性はあると思います。
支払方法には金額による有効/無効の判定もあり条件に一致しない場合は空の配列が返ってくるようになっているかと思います。
function getFormPaymentsの最後にある
$payments = $this->getPayments($payments, $Order->getSubTotal());
で呼び出しているfunction getPayments()は以下の内容ですが
ループ中のifで1度も真にならなかった場合、
$pays = array();
が返ってきます。

public function getPayments($payments, $subTotal)
{
    $pays = array();
    foreach ($payments as $payment) {
        // 支払方法の制限値内であれば表示
        if (!is_null($payment)) {
            $pay = $this->app['eccube.repository.payment']->find($payment['id']);
            if (intval($pay->getRuleMin()) <= $subTotal) {
                if (is_null($pay->getRuleMax()) || $pay->getRuleMax() >= $subTotal) {
                    $pays[] = $pay;
                }
            }
        }
    }
    return $pays;
}


デフォルトでは支払方法が空の配列の場合も想定して処理が実装されているかと思います。


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

mackarel
投稿日時: 2021/8/4 22:44
対応状況: −−−
半人前
登録日: 2018/11/2
居住地:
投稿: 24
Re: Shippingデータが取れない??
ありがとうございます!
お返事に気づくのが遅くなってしまいました。。。
あれから色々やってみたのですが、単純にファイルが足りなかっただけでした。。。アップ時にひっそり失敗していたようです。。。

お騒がせしましたm(__)m
スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

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.