EC-CUBE 3.0.16
MySQL 5.6.19
PHP 5.6.36
例として、あるカテゴリに「関連A」(assoc_A)という補足情報を追加する場合。
1. テーブルへのカラム追加
dtb_categoryテーブルへ”assoc_A”という名前のカラムをtinyintタイプで追加。また、NULLを許可にする。
2. エンティティファイルに、セッターゲッター追加
/src/Eccube/Entity/Category.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 integer */ private $assoc_A; /** * @return string */ public function getAssocA() { return $this->assoc_A; } /** * @param string $assoc_A * @return \Eccube\Entity\Category */ public function setAssocA($assocA) { $this->assoc_A = $assocA; return $this; } /************************************ ※メソッド名とその引数にアンダーバーを使うと エラーになるので、宣言した変数名にアンダーバー を含む場合は上記のように、アンダーバーを消して その次の文字を大文字(キャメルケース)にする。 ************************************/ |
3. データベース定義ファイルへカラム追加
/src/Eccube/Resource/doctrine/Eccube.Entity.Category.dcm.yml
fields一覧にassoc_Aの項目を追加。データベースとエンティティクラスを接続するのがdcm.yml(Doctrineマッピングファイル)。これにより、Categoryエンティティのassoc_Aとdtb_categoryのassoc_Aカラムが接続される。
1 2 3 |
assoc_A: type: boolean nullable: true |
※データ型がint,smallint,tinyintでも、Formでcheckboxタイプを使う予定のため( 論理型(値が1か0のタイプ)と認識されるので)ブーリアンタイプにしておく。
ECCUBE3で使用できるtype一覧は過去記事参照。
4. フォーム定義ファイルへの項目追加
/src/Eccube/Form/Type/Admin/CategoryType.php
下記のように、管理画面の商品登録フォームへ定義を追加。
1 2 3 4 5 |
$builder->add('assoc_A', 'checkbox', array( 'label' => 'A', 'required' => false, //valueはデフォルトで"1"らしい )); |
5. 管理画面(カテゴリ登録画面)へフォーム表示
/app/template/admin/Product/category.twig
フォームを表示したい場所に下記のように記述。
1 2 3 |
{{ form_row(form.assoc_A) }} {{## もしくは ##}} {{ form_widget(form.assoc_A) }}{{ form_errors(form.assoc_A) }} |
6. 商品詳細ページへの表示
/app/template/default/Product/detail.twig
関連付けした情報を使って詳細ページでごにょごにょするには、多少の工夫が必要。これについては別途書く予定。
とりあえず以上。
参考URL)