仕事で管理しているEC-CUBE(3系)で作られたサイトで、注文情報に「注文前に表示していた出荷日情報」を追加することになったので、その時おこなった手順をまとめておく。
コンテンツ
dtb_orderテーブルにカラムを追加
まず、注文情報を管理するdtb_orderテーブルにカラム(今回はshowed_shippingというカラム名)を追加する。
データ型はDate
とした。
Entityファイルの更新(プロパティとゲッター・セッターの追加)
注文情報を管理するエンティティファイルsrc/Eccube/Entity/Order.php
に新規プロパティと、関連するゲッター、セッターを追加する。
// 以下を追加
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
に新たに項目を追加する。
/**
* {@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
メソッドでプロパティのセッターを実行するようにする。
/**
* フォームデータを更新
*
* @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
で以下のように出力させるようにした。
{# 注文確定時に表示されていた出荷日情報 #}
{{ form_widget(form.showed_shipping, {'attr': {'id': 'showed_shipping'}, 'type': 'hidden'}) }}
追加したカラムに書き込むための設定
最後にsrc/Eccube/Resource/doctrine/Eccube.Entity.Order.dcm.yml
へ、追加したカラムへデータを書き込むための設定を追加する。
// 以下を追加
fields:
showed_shipping:
type: datetime
nullable: true
これでdtb_orderテーブルへ追加した項目に値を書き込めるようになる。