仕事で管理しているEC-CUBE(3系)で作られたサイトで、注文情報に「注文前に表示していた出荷日情報」を追加することになったので、その時おこなった手順をまとめておく。
コンテンツ
dtb_orderテーブルにカラムを追加
まず、注文情報を管理するdtb_orderテーブルにカラム(今回はshowed_shippingというカラム名)を追加する。
データ型はDate
とした。
Entityファイルの更新(プロパティとゲッター・セッターの追加)
注文情報を管理するエンティティファイルsrc/Eccube/Entity/Order.php
に新規プロパティと、関連するゲッター、セッターを追加する。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 | // 以下を追加 private $showed_shipping ; public function setShowedShipping( $showed_shipping ) { $this ->showed_shipping = $showed_shipping ; return $this ; } public function getShowedShipping() { return $this ->showed_shipping; } |
FormTypeに新規項目を追加
Formの項目を管理するファイルsrc/Eccube/Form/Type/ShoppingType.php
に新たに項目を追加する。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 | /** * {@inheritdoc} */ public function buildForm(FormBuilderInterface $builder , array $options ) { $payments = $options [ 'payments' ]; $payment = $options [ 'payment' ]; $message = $options [ 'message' ]; $builder // ...省略 // 以下を追加 ->add( 'showed_shipping' , 'text' , array ( 'required' => false, 'data' => '' , )); } |
ShoppingServiceファイルの更新
備考欄のように注文内容確認画面に入力欄を設ける場合は、src/Eccube/Service/ShoppingService.php
ファイルのsetFormData
メソッドでプロパティのセッターを実行するようにする。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 | /** * フォームデータを更新 * * @param Order $Order * @param array $data */ public function setFormData(Order $Order , array $data ) { // お問い合わせ $Order ->setMessage( $data [ 'message' ]); // お届け先情報を更新 $shippings = $data [ 'shippings' ]; foreach ( $shippings as $Shipping ) { $deliveryTime = $Shipping ->getDeliveryTime(); if (! empty ( $deliveryTime )) { $Shipping ->setShippingDeliveryTime( $deliveryTime ->getDeliveryTime()); } } // 以下を追加 $Order ->setShowedShipping( $data [ 'showed_shipping' ]); } |
注文内容確認画面に追加項目を表示
今回は前もって設定した出荷日情報をhidden値として送信したかったので、テンプレート側Shopping/index.twig
で以下のように出力させるようにした。
1 2 | {# 注文確定時に表示されていた出荷日情報 #} {{ form_widget(form.showed_shipping, {'attr': {'id': 'showed_shipping'}, 'type': 'hidden'}) }} |
追加したカラムに書き込むための設定
最後にsrc/Eccube/Resource/doctrine/Eccube.Entity.Order.dcm.yml
へ、追加したカラムへデータを書き込むための設定を追加する。
1 2 3 4 5 | // 以下を追加 fields: showed_shipping: type: datetime nullable: true |
これでdtb_orderテーブルへ追加した項目に値を書き込めるようになる。