質問 > フロント機能 > 【ECCUBE3.0.10】注文画面に項目を追加したい |
フロント機能
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | 下へ |
投稿者 | スレッド |
---|---|
ryooo_sk |
投稿日時: 2017/1/21 20:35
対応状況: −−−
|
新米 登録日: 2016/12/26 居住地: 投稿: 5 |
【ECCUBE3.0.10】注文画面に項目を追加したい 【ECCUBE3.0.10】注文画面に項目を追加したい
お世話になっております。 注文時に、デフォルトの項目以外のものもフォームに追加し、 送信されるメールや管理画面上でも確認できるようにしたいと考えております。 具体的には、ラッピングの有無・メッセージカードの内容・のしの種類の選択、のようなセレクトボックスを、 /shopping の画面に配置し、「お支払方法」を選ぶのと同じように扱いたいと考えています。 2系ですと http://sachips.byeto.jp/eccube/orderform-add-item.html のような記事を見つけることができたのですが、3系で同じような情報が見つからず。。。 具体的にどのように実装すれば実現できるのか、どなたか教えていただけないでしょうか。 よろしくお願いします。 |
468 |
投稿日時: 2017/1/22 14:36
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 【ECCUBE3.0.10】注文画面に項目を追加したい もし、私がカスタマイズするならという前提での工程ですが、以下の作業が必要になるかと思います。
(実際に作業していないので、何か漏れているかもしれませんが・・・) 1.dtb_orderテーブルにカラムを追加 2.Orderエンティティクラスに新しい項目(ローカル変数 + getter/setter)を追加 3.Eccube.Entity.Order.dcm.ymlにテーブル追加したカラムとエンティティに追加したローカル変数のマッピングを追加 4.追加するセレクトボックスの選択肢のFormTypeクラスを追加 (ECCUBE標準の実装方法に則り、性別や職業のようにDBにマスタテーブルを作る場合は、 mtb_sexやmtb_jobのようなテーブルとSexエンティティやJobエンティティも作って、 マッピングも追加します。) 5.注文画面の入力項目をShoppingTypeクラスに追加する 6.テンプレートShopping/index.twigに項目を表示するエリア等を追加 7.ShoppingControllerクラスのconfirm()メソッド内で、追加した項目の情報をDBに保存するように処理を変更 8.メールテンプレートMail/order.twigに追加した項目の表示を追記 上記の作業はフロントのみの作業になりますので、 管理画面側も対応が必要かと思いますので、 テンプレートやFormTypeクラスに対する作業が同じくらいあるかと思います。 基本、symfony2の Form コンポーネントやTwig、Doctrineのルールに則って実装する必要がある為、 項目を追加するだけでも、 エンティティやFromType、twigなどをワンセットで触っていく必要があるかと思います。 (2.13系に比べて、作業する事や手を加える必要のあるファイルは多いかなと感じております) 商品ごとの設定と少し要件が異なりますが、 商品オプションプラグインでの対応は難しいのでしょうか? http://www.ec-cube.net/products/detail.php?product_id=1148
|
ryooo_sk |
投稿日時: 2017/1/22 23:40
対応状況: −−−
|
新米 登録日: 2016/12/26 居住地: 投稿: 5 |
Re: 【ECCUBE3.0.10】注文画面に項目を追加したい 丁寧なご回答ありがとうございます。
symfony2については、きちんと学習したことがないため、項目追加はわりと敷居が高そうですね。。。影響範囲も大きそうです。 プラグインを使うか、運用でカバーするか、すこし考えてみたいと思います。 ありがとうございました! |
katsuo77 |
投稿日時: 2017/11/16 17:34
対応状況: −−−
|
半人前 登録日: 2017/10/14 居住地: 投稿: 12 |
Re: 【ECCUBE3.0.10】注文画面に項目を追加したい 私もちょうどryooo_skさんのご質問と同じような実装をしたいと考えていたところこちらの投稿に行き当たりました。
468さんのご回答を参考に実装しおおよその部分は作ることができたのですが、 7.ShoppingControllerクラスのconfirm()メソッド内で、追加した項目の情報をDBに保存するように処理を変更 のところだけ実装方法がわかりません。 confirm()メソッド内の、 // お問い合わせ、配送時間などのフォーム項目をセット $app['eccube.service.shopping']->setFormData($Order, $data); // 購入処理 $app['eccube.service.shopping']->processPurchase($Order); のあたりをいじるのかとはなんとなく思うのですが、実際のコード等教えていただいてもよろしいでしょうか? よろしくお願いいたします。 |
468 |
投稿日時: 2017/11/16 20:39
対応状況: −−−
|
神 登録日: 2008/10/26 居住地: 投稿: 3217 |
Re: 【ECCUBE3.0.10】注文画面に項目を追加したい >// お問い合わせ、配送時間などのフォーム項目をセット
>$app['eccube.service.shopping']->setFormData($Order, $data); >// 購入処理 >$app['eccube.service.shopping']->processPurchase($Order); 上記の処理は、 /src/Eccube/Service/ShoppingService.php内のメソッドを呼び出して処理している所までは ご理解いただけているという事でよろしかったでしょうか? 1098行目のfunction setFormData(Order $Order, array $data) {}の 中身を確認いただくと、 お問い合わせメッセージを$Orderにセットしていると思いますので、 同じように$Orderに追加したキーを指定して値をセットすれば、 OrderEntityに画面からの入力値を渡せます。 (formクラスがキチンと記述出来ていれば、 画面からの入力値は$data[xxx]に入っています) 1149行目のfunction processPurchase(Order $Order) {}は 金額の再計算、在庫数の計算、会員の累計購入金額の計算をしているだけですので、 追加した項目が金額や在庫数に関係ないのであれば、何も手を加える必要はないと思います。 EntityとDBのマッピング(/src/Eccube/Resource/doctrine/Eccube.Entity.Order.dcm.yml)が正しく記述できていれば、 あとは自動的にDBに値が保存されると思います。
|
katsuo77 |
投稿日時: 2017/11/17 17:46
対応状況: −−−
|
半人前 登録日: 2017/10/14 居住地: 投稿: 12 |
Re: 【ECCUBE3.0.10】注文画面に項目を追加したい 468様
早速のご回答ありがとうございます。 そちらのメソッドを呼び出していることは理解できていませんでした。。 ですが、教えていただいた通りfunction setFormData(Order $Order, array $data) {}内で値をセットしたところ、きちんとDBにも格納され望む挙動を示すことができました。 ありがとうございます。 |
スレッド表示 | 新しいものから | 前のトピック | 次のトピック | トップ |