EC-CUBE 3.0.16
MySQL 5.6.19
PHP 5.6.36
例として、商品名かな(name_kana)という項目を追加する場合。
1. テーブルへのカラム追加
dtb_productテーブルへ”name_kana”という名前のカラムをtextタイプ(またはvarchar)で追加。また、NULLを許可にする。
2. エンティティファイルに、セッターゲッター追加
/src/Eccube/Entity/Product.php
以下のように追記。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
/** * @var string */ private $name_kana; /** * @return string */ public function getNameKana() { return $this->name_kana; } /** * @param string $name_kana * @return \Eccube\Entity\Product */ public function setNameKana($nameKana) { $this->name_kana = $nameKana; return $this; } /************************************ ※メソッド名とその引数にアンダーバーを使うと エラーになるので、宣言した変数名にアンダーバー を含む場合は上記のように、アンダーバーを消して その次の文字を大文字(キャメルケース)にする。 ************************************/ |
3. データベース定義ファイルへカラム追加
/src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml
fields一覧にname_kanaの項目を追加。データベースとエンティティクラスを接続するのがdcm.yml(Doctrineマッピングファイル)。これにより、Productエンティティのname_kanaとdtb_productのname_kanaカラムが接続される。
1 2 3 |
name_kana: type: text nullable: true |
ちなみに、EC-CUBE3が採用しているSymfonyの標準ORM、Doctorineで設定できるフィールドタイプは以下の通り。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
const TARRAY = 'array'; const SIMPLE_ARRAY = 'simple_array'; const JSON_ARRAY = 'json_array'; const BIGINT = 'bigint'; const BOOLEAN = 'boolean'; const DATETIME = 'datetime'; const DATETIMETZ = 'datetimetz'; const DATE = 'date'; const TIME = 'time'; const DECIMAL = 'decimal'; const INTEGER = 'integer'; const OBJECT = 'object'; const SMALLINT = 'smallint'; const STRING = 'string'; const TEXT = 'text'; const BINARY = 'binary'; const BLOB = 'blob'; const FLOAT = 'float'; const GUID = 'guid'; |
4. フォーム定義ファイルへの項目追加
/src/Eccube/Form/Type/Admin/ProductType.php
下記のように、管理画面の商品登録フォームへ定義を追加。
1 2 3 4 |
$builder->add('name_kana', 'text', array( 'label' => '商品名かな', 'required' => true, )); |
上記の書き方で入力必須とならない場合(未入力で保存した際にエラーとならない)場合は、下記のようにする。
1 2 3 4 5 6 7 |
$builder->add('name_kana', 'text', array( 'label' => '商品名かな', 'required' => true, 'constraints' => array( new Assert\NotBlank(), ), )); |
なお、フォームの入力形式として整数型としたい場合は、第2引数に”integer”, 浮動小数点型としたい場合は、第2引数に”number”を指定するなどして対応。
このほかにも選択型(choice型)も指定できる。詳細は公式ドキュメントを参照。
5. 管理画面(商品情報登録画面)へフォーム表示
/app/template/admin/Product/product.twig
フォームを表示したい場所に下記のように記述。
1 |
{{ form_row(form.name_kana) }} |
form_rowは、form_label、form_widget、form_errorsを同時に出力する関数。テキストの入力幅を小さくしたい場合などは、form_label、form_widget、form_errorsに分割するなどしてCSSで対応。
1 2 3 4 5 6 7 8 9 |
<!-- 入力幅を小さく --> <div id="" class="form-group"> {{ form_label(form.name_kana) }} <!-- col-sm-* col-lg-* の「*」値で調整すると簡単 --> <div class="col-sm-2 col-lg-2"> {{ form_widget(form.name_kana) }} {{ form_errors(form.name_kana) }} </div> </div> |
6. 商品詳細ページへの表示
/app/template/default/Product/detail.twig
フロント側で出力。好きな場所に下記のように記載。未登録であれば何も出力されない。
1 |
{{ Product.name_kana }} |
以上。
参考URL)
- https://umebius.com/eccube/insert-column-into-dtb_product_table/
- https://umebius.com/eccube/doctorine%E3%81%A7%E8%A8%AD%E5%AE%9A%E3%81%A7%E3%81%8D%E3%82%8B%E3%83%95%E3%82%A3%E3%83%BC%E3%83%AB%E3%83%89%E3%82%BF%E3%82%A4%E3%83%97/
- https://www.terastella.com/ec-cube3-add-form.html
- http://symfony.com/doc/current/reference/forms/types.html