バージョン選択

フォーラム

メニュー

オンライン状況

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

サイト内検索

質問 > フロント機能 > カートページのカート内商品にフォームを追加したい

フロント機能

新規スレッドを追加する

スレッド表示 | 新しいものから 前のトピック | 次のトピック | 下へ
投稿者 スレッド
h_tanaka
投稿日時: 2021/6/29 17:55
対応状況: 解決済
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1638
カートページのカート内商品にフォームを追加したい
EC-CUBE 4.0.5

カートページの商品に「ギフトラッピング」のチェックボックスを設けたいです。

カートページにフォームを設置してPOST送信に変更することで、カート内商品 CartItem に情報を保存しました。

app/template/default/Cart/index.twig
<label><input type="checkbox" name="gift_wrapping_{{ CartItem.id }}" value="1" {% if CartItem.gift_wrapping %}checked{% endif %}>ギフトラッピングを希望する</label>


src/Eccube/Controller/CartController.php
$gift_wrapping = $request->request->get('gift_wrapping_' . $CartItem->getId());
$CartItem->setGiftWrapping($gift_wrapping);
$this->entityManager->persist($CartItem);


この情報を注文情報作成時に注文明細 OrderItem に反映させるようにしました。

src/Eccube/Service/OrderHelper.php
createOrderItemsFromCartItems() 内
$OrderItem->setGiftWrapping($item->isGiftWrapping());


ここまでは正常に動作するよう実装できたのですが、注文手続きページからカートページに戻ってチェックボックスのON/OFFを切り替えても注文明細に反映されません。

カート内商品の数量増減ボタンの処理を参考にしようと追っているのですが、カートの数量変更をどこで注文明細の数量に反映しているのかがわかりませんでした。

カート内商品情報の変更を注文明細に反映するにはどうすれば良いでしょうか?
468
投稿日時: 2021/6/30 10:19
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: カートページのカート内商品にフォームを追加したい
src/Eccube/Service/OrderHelper.php createOrderItemsFromCartItems() 内に
処理を追記されているようですが
この時の$item->isGiftWrapping()にON/OFFが反映されていないという事でしょうか?
この段階でDBのdtb_cart_itemテーブルにはON/OFFは反映されていますか?


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

h_tanaka
投稿日時: 2021/6/30 10:23
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1638
Re: カートページのカート内商品にフォームを追加したい
468 さん

createOrderItemsFromCartItems()
の $item->isGiftWrapping() では反映されています。

ただ、この関数は受注情報を生成するときにしか呼ばれないため、受注情報生成後はこの処理を通ってきません。

DBを確認すると、カート内商品の数量を増減すると、即時に受注明細の数量も更新されているようなので、プリプロセッサーで行ってるのかなと思ったのですが、それらしい処理が見当たらず。。
468
投稿日時: 2021/6/30 10:33
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: カートページのカート内商品にフォームを追加したい
数量の変更などカートへの変更を行った後は
CartService->save()を実行しているのではないかと思います。

そのタイミングでDBやセッションへ反映されているのではないかと思います。


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

h_tanaka
投稿日時: 2021/6/30 10:36
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1638
Re: カートページのカート内商品にフォームを追加したい
468さん

はい、カート内商品 CartItem への変更は CartService->save() で行われていますが、これに対応する注文明細 OrderItem への変更を行っている箇所がわからないのです。
DBで確認して OrderItem.id は変わっていないので作り直しているわけではないようです。
468
投稿日時: 2021/6/30 10:39
対応状況: −−−
登録日: 2008/10/26
居住地:
投稿: 3217
Re: カートページのカート内商品にフォームを追加したい
>ただ、この関数は受注情報を生成するときにしか呼ばれないため、受注情報生成後はこの処理を通ってきません。

デフォルトではカートの中身を変更してご注文手続き画面へ遷移すると
もう一度受注データが生成され、createOrderItemsFromCartItems()を経由すると思いますが如何でしょうか?

ON/OFFを変更してもカートの中身が変更されたと認識されていないのかもしれませんね。


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

h_tanaka
投稿日時: 2021/6/30 10:47
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1638
Re: カートページのカート内商品にフォームを追加したい
468さん

ほんとですね!
標準のEC-CUBE4.0.5 で試したら 数量変更で CartItem も OrderItem もレコードが作り直されました。

これは他のプラグインに制御が持っていかれているのか。。
調べてみます!
ありがとうございます。
h_tanaka
投稿日時: 2021/6/30 12:50
対応状況: −−−
登録日: 2016/7/22
居住地: 愛媛県
投稿: 1638
Re: カートページのカート内商品にフォームを追加したい
商品オプションプラグインに制御されていました。

数量の増減は POST送信ではなく PUT送信だったため、これに合わせて「ギフトラッピング」チェックボックスも PUT送信に変更しました。

カート内商品の数量変更は QuantityAdjustValidator にて制御されていたため、こちらにチェックボックス変更の制御を追加することで動作するようになりました。


----------------
EC-CUBE 《プラチナ》ランクパートナー
トエビス株式会社 田中 宏典
EC-CUBEの機能やデザインのカスタマイズ承ります。

スレッド表示 | 新しいものから 前のトピック | 次のトピック | トップ


 



ログイン


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

統計情報

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

投稿数ランキング

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