プラグイン > 開発について > 商品詳細ページからメッセージを取得してショッピングページのお問い合わせフォームに表示したい |
開発について
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
t.murakami |
投稿日時: 2017/7/27 13:35
対応状況: −−−
|
半人前 登録日: 2017/6/7 居住地: 投稿: 12 |
商品詳細ページからメッセージを取得してショッピングページのお問い合わせフォームに表示したい [EC-CUBE]3.0.14
[Server] Google Cloud Platform [OS]CentOS7 [PHP]5.4.16 [データベース]MySQL [WEBサーバ]Apache2 ====================================== 上記環境で家具ショップを構築中の者です。 「商品詳細ページ」にて、お客様が「カートへ入れる」ボタンを押下する直前に、 「搬入経路確認は済んでいるかどうか」「組立サービスを利用するかどうか」を聞く必要があるので、 「商品詳細ページ」に、セレクトフォームを追加することにしました。 ====================================== 選択肢は、 「搬入経路確認はお済みですか?」 1.搬入経路OK 2.搬入経路に問題がある/又はよくわからないので連絡が欲しい 「組立サービスを利用しますか?」 1.組立を自分でやる 2.組立サービスを購入する としました。 ====================================== Eccube/Controller/ProductControllerのfront.product.detail.initializeイベントを利用し、 商品詳細ページのテンプレートコードを少し変更して、 セレクトフォームを追加するところまでは問題なくできました。
このように商品詳細ページで取得したフォームデータを、 以下の要領で保存して、商品購入ページ(Shopping::index)の お問い合わせ欄に羅列表示したいです。 ====================================== ・商品詳細ページにてお客様が「2.搬入経路に問題がある/又はよくわからないので連絡が欲しい」、 または「2.組立サービスを購入する」を選択した時のみ、Cart内のCartItemにメッセージを保存する。 ・メッセージの保存形式は[product_class_code: 搬入経路に問題がある/又はよくわからないので連絡が欲しい]、[product_class_code: 組立サービスを購入する]のようにする。 ・メッセージはCartItemと紐づいている必要がある。CartItemがカートから削除された場合はメッセージも消去する必要がある。 ・保存されたメッセージを「Shopping::index画面(注文確認画面)」の「お問い合わせ欄」フォームに羅列表示する。 ====================================== 下記の通り試してみたのですが、うまくいきません。 1.CartItemエンティティを拡張してメッセージを保存できるようにする。 CartItem.php
2.CartにCartItemをセットする処理の時にCartItemのmessageをコピーするように、Cart.phpも改造。 Cart.php
3.各Controllerから使う用に2つの関数をCartService.phpに追加。 CartService.php
4.以上の改造を施した上で、商品詳細ページからカートに商品を追加する際にセレクトフォームのメッセージをCart内のCartItemエンティティに保存するように、ProductController.phpの278行目にあるtryの部分を以下のように変更しました。 ProductController::detail 278行目~
====================================== 以上の改造を終え、dumpでカートの中身を確認してみたところ、 商品詳細ページで商品をカートに入れた直後(Cart::indexにリダイレクトする直前)には、 きちんとCartItemにmessageが入っているのですが、、、 カート画面(Cart::index)にリダイレクトで飛ぶと、 CartItemのmessageがnullになってしまいます。。。 また、Cartオブジェクトのメモリ内の参照先や、 CartItemのメモリ内での参照先も変更になっているようです。。。 (#xxxxの部分、数字が変わっている。) ====================================== この問題、どなたか、お分かりになる方、 いらっしゃいませんでしょうか? いらっしゃいましたら、何卒ご教授の程、 よろしくお願いいたします。 |
umebius |
投稿日時: 2017/8/1 0:04
対応状況: −−−
|
神 登録日: 2016/7/22 居住地: 投稿: 2085 |
Re: 商品詳細ページからメッセージを取得してショッピングページのお問い合わせフォームに表示したい CartItemはセッションに保存されるエンティティです。
他のエンティティとは扱い方が違います。 messageがセッションに保存されるようなっていないのでは? 詳しく見ていないので見当違いでしたら申し訳ございません
|
t.murakami |
投稿日時: 2017/8/1 13:26
対応状況: −−−
|
半人前 登録日: 2017/6/7 居住地: 投稿: 12 |
Re: 商品詳細ページからメッセージを取得してショッピングページのお問い合わせフォームに表示したい CartItemはセッションに保存されるエンティティです。
>> そのようですね。 Cart自体もテーブルが見当たりませんね。 Cartの保存はCartServiceに定義されているsave()ファンクションによって、 SymfonyコンポーネントのSessionを使って セッションに保存しているようですね。 私はてっきり、会員ログイン時にカートに入れた商品はDBに保存されて、 一旦ブラウザを閉じた後で再ログインすると カートに商品が残っているものかと思っていましたが カートに商品は残りませんでした。 どうやらCartシステムは完全にセッション保存のみのようです。 このあたりも改善したいなぁ。 とりあえず、SymfonyのHttpFoundationのSessionのドキュメントを読んで、 あれこれ試行錯誤してみます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |