仕事で管理している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テーブルへ追加した項目に値を書き込めるようになる。