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をカスタマイズしてみてください。

今後のバージョンアップにより手順が変わる可能性はありますが、その際はまたこのページでご紹介する予定です。