EC-CUBE3で商品に項目を追加したいというご要望が多く寄せられています。
今回はプラグインを使用せずに商品情報へメーカー名(テキスト)を追加する方法をご紹介します。この手順を守って実施すると各ステップでエラーが起きないためおすすめです。ステップごとに問題が発生しないかどうか確認してみてください。
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 }}
以上になります。今回は商品情報に項目を追加しましたが、この方法は会員情報や受注情報などにも応用可能です。
ぜひ参考にしてEC-CUBE3をカスタマイズしてみてください。
今後のバージョンアップにより手順が変わる可能性はありますが、その際はまたこのページでご紹介する予定です。
EC-CUBEに関するお問い合わせ
[重要]現在公式にセキュリティサポートが切れていないPHPは8.1以上、MySQLは8.0以上で、対応しているEC-CUBEバージョンは4.2以上です。古いEC-CUBEを使っている方は適切なタイミングでバージョンアップをご検討ください。