今回はプラグインを使用せずに商品情報へメーカー名(テキスト)を追加する方法をご紹介します。この手順を守って実施すると各ステップでエラーが起きないためおすすめです。ステップごとに問題が発生しないかどうか確認してみてください。
1. テーブルへのカラム追加
dtb_productテーブルへ”maker”という名前のカラムをtextタイプで追加してください。また、NULLを許可しておきます。
phpMyAdminやAdminerなどで追加すればかまいません
マイグレーションによるテーブルへの項目追加
2. エンティティへのプロパティ、セッターゲッター追加
src/Eccube/Entity/Product.php
Productクラス内に次のように$makerというプロパティとセッターメソッド・ゲッターメソッドをを追加してください。この時点ではまだProductエンティティはデータベースを参照しないため、getMaker()はsetMaker()しない限りNULLが返ってきます。
/**
* @var string
*/
private $maker;
/**
* @return string
*/
public function getMaker()
{
return $this->maker;
}
/**
* @param string $maker
* @return \Eccube\Entity\Product
*/
public function setMaker($maker)
{
$this->maker = $maker;
return $this;
}
3. データベース定義ファイルへのカラム追加
src/Eccube/Resource/doctrine/Eccube.Entity.Product.dcm.yml
fields一覧に次の項目を追加してください。データベースとエンティティクラスを接続するのがdcm.yml(Doctrineマッピングファイル)です。この記述により、Productエンティティのmakerというプロパティはdtb_productのmakerカラムと接続されます。
maker:
type: text
nullable: true
4. フォーム定義ファイルへの項目追加
src/Eccube/Form/Type/Admin/ProductType.php
管理画面の商品登録フォームへ定義を追加します。
$builder->add('maker', 'text', array(
'label' => 'メーカー',
'required' => false,
));
5. 管理画面(商品情報登録画面)へフォーム表示
template/admin/Product/product.twig
フォームを表示したい場所に記述します。form_row関数はform_widgetとform_errorsを同時に出力するヘルパー関数です。
もちろんform_widgetとform_errorsを利用いただいても問題ありません。ここまでで商品テーブルへメーカーの情報を追加し管理できるようになりました。
{{ form_row(form.maker) }}
6. 商品詳細ページへの表示
template/default/Product/detail.twig
フロント側でメーカーの情報を出力します。Product/detail.twigでは好きな場所に{{ Product.maker }}を用いて表示することが可能です。メーカー情報が未登録であれば何も出力されません。
{{ Product.maker }}
以上になります。今回は商品情報に項目を追加しましたが、この方法は会員情報や受注情報などにも応用可能です。