質問 > フロント機能 > ShoppingService.phpでの商品規格情報取得 |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ゲスト |
投稿日時: 2017/12/10 10:43
対応状況: 解決済
|
ShoppingService.phpでの商品規格情報取得 初めまして、プログラミング初心者なのですが、質問させてください。
現在、送料計算の方法を変更しようと「ShoppingService.php」にコードを書き加えています。 最終的にやろうとしていることは、「注文(配送)商品の規格と数量から、箱の大きさを判定し、適切な送料を計算する」という内容です。 そのうえで、注文(配送)内容から規格別の注文数量を取得しようとしており、以下のように書いてみているのですが、規格別の注文数量がうまく加算されないようです。 ShoppingService.phpのsetShippingDeliveryFee内 ---------- // 規格別の本数を取得 $bigItemQuantity = 0; $smallItemQuantity = 0; $shipmentItems = $Shipping->getShipmentItems(); foreach ($shipmentItems as $ShipmentItem) { if ($ShipmentItem->getProductClass()->getClassCategory1() == 1){ $smallItemQuantity += $ShipmentItem->getQuantity(); } if ($ShipmentItem->getProductClass()->getClassCategory1() == 2){ $bigItemQuantity += $ShipmentItem->getQuantity(); } } ---------- 上記の結果なのですが、ClassCategory1 == 1の商品を複数注文しても、ClassCategory1 == 2の商品を複数注文しても、$smallItemQuantityや$bigItemQuantityが0のままになってしまっているようです。 改善方法やアドバイスなどいただけますと助かります。 よろしくお願いします! ========== ▼テンプレート [EC-CUBE] 3.0.10 [レンタルサーバ] - (ローカルサーバ) [OS] OS X 10.12.6 [PHP] 7.0.0 [データベース] MySQL5.5.42 [WEBサーバ] Apache [ブラウザ] Chrome [導入プラグインの有無] 無 [カスタマイズの有無] 本件以外はほぼ無し [現象] 上記 |
|
minori |
投稿日時: 2017/12/11 10:59
対応状況: −−−
|
常連 登録日: 2017/10/12 居住地: 投稿: 40 |
Re: ShoppingService.phpでの商品規格情報取得 比較している値が商品規格IDでしたら、
取得する項目が異なっていることが原因だと思います。 $ShipmentItem->getProductClass()->getClassCategory1() ↓ $ShipmentItem->getProductClass()->getId() に変更するとどうでしょうか? |
ゲスト |
投稿日時: 2017/12/11 11:16
対応状況: −−−
|
Re: ShoppingService.phpでの商品規格情報取得 ご返信ありがとうございます!
ClassCategory1に相当する規格に、各商品共通で大きさを示す内容を設定しております。 それが大なのか小なのか、によって箱の大きさが変わり、送料が変わるためそれを反映したいと考えております。 ProductClassのテーブルに入っているレコードを簡易的に書くと、 商品1 - 大 商品1 - 小 商品2 - 大 商品2 - 小 商品3 - 大 商品3 - 小 ・ ・ ・ という感じになっています。 たとえば商品1 - 大と商品2 -小を1点ずつ注文された場合、小さな箱には入らないので両方を大きな箱1つに入れて送ることになります。 別の注文で、商品3 - 小を2点注文された場合には、小さな箱1つに入れて送ることが可能です。 これらのケースで送料が異なるため、それを反映したい、というのがやろうとしていることです。 商品点数が多くなるとさらに、大きな箱1つと小さな箱1つで送る、などのケースもあるため、まずは大きな商品と小さな商品の数をカウントしようとしているのですが、その部分でつまづいております。 その上で何か思い当たることなどありましたら、引き続き教えていただけますと大変助かります! |
|
minori |
投稿日時: 2017/12/11 11:55
対応状況: −−−
|
常連 登録日: 2017/10/12 居住地: 投稿: 40 |
Re: ShoppingService.phpでの商品規格情報取得 詳しいご説明ありがとうございます。
状況が理解できました。 getClassCategory1だと値ではなくオブジェクトが返却されて しまうので、正しく比較できていないかもしれません。 実行して確認していないため動くかどうかわかりませんが、 以下のような感じだとどうでしょうか?
|
ゲスト |
投稿日時: 2017/12/11 23:41
対応状況: −−−
|
Re: ShoppingService.phpでの商品規格情報取得 ご丁寧にありがとうございます!
開発環境を触れる場所にいなかったため、返信遅くなってしまい申し訳ありませんでした。 記載いただいた通りにコードを変更してみましたが、やはりsmallItemQuantityもbigItemQuantityも0のままになってしまうようでした・・・ ご指摘いただいたとおり、getClassCategory1だけでなくその先のgetIdを行う必要がありそうなので、これでいけるかと思ったのですが。 他の部分に原因があるのかもしれないと思いましたので、現状setShippingDeliveryFeeの部分がどうなっているかを以下に記載いたします。 もし他にお気付きの点等あれば、ご指摘いただければ助かりますm(_ _)m
|
|
minori |
投稿日時: 2017/12/12 11:56
対応状況: −−−
|
常連 登録日: 2017/10/12 居住地: 投稿: 40 |
Re: ShoppingService.phpでの商品規格情報取得 ShoppingServiceの呼び出し元の処理を確認してみました。
getNewShippingメソッドから、今回修正した setShippingDeliveryFeeメソッドが呼び出されているのですが、 この時点ではShippingItemのデータが作成されていません。 次に呼び出されているgetNewDetailsのメソッド内で カートに入っている商品をループしながら OrderDetailやShippintItemのデータを作成しています。 そのため、$Shipping->getShipmentItems()の時点では 取得件数が0件ですので、その後のループ文の中に 入っておらず数量が計算されなかったようです。
ShipmentItem作成後に処理を追加してあげる必要があるので、 getNewDetailsメソッドの後に呼び出されている 配送料合計金額を取得しているメソッド(getShippingDeliveryFeeTotal)に 手を加えてみてはいかがでしょうか? |
ゲスト |
投稿日時: 2017/12/12 14:11
対応状況: −−−
|
Re: ShoppingService.phpでの商品規格情報取得 呼び出し元の処理順のこと、全然気がついておりませんでした!
ありがとうございます! setShippingDeliveryFeeメソッドは元に戻し、 getShippingDeliveryFeeTotalメソッドを以下のように直すことで、 やりたいとおりの動作をするようになりました。 ご丁寧に教えていただき、本当にありがとうございました!!
|
|
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |