Blog スタッフブログ

EC-CUBE システム開発

[EC-CUBE]EC-CUBE4のカラムの追加

システム開発担当のTFです。

※EC-CUBE4系統対応

やり方

  • app/Customize/Entityにtrait作成
  • コマンドでphpを叩き、Proxyの作成 (app/proxy/entity/src/Eccube/Entity に作成される)
  • コマンドでphpを叩き、テーブルに反映させる
  • フォームを整える(フォームが必要な場合)

参考

  Entityのカスタマイズ
  EC-CUBE4 テーブルのカラム変更 方法
  【EC-CUBE4】新規テーブル&カラム追加方法
  [4系] 新規会員登録画面に項目を追加する方法
  ディレクトリ・ファイル構成

サンプル

<?php

namespace Customize\Entity;

use Doctrine\ORM\Mapping as ORM;
use Eccube\Annotation as Eccube;
use Eccube\Annotation\EntityExtension;

/**
  * @EntityExtension("Eccube\Entity\ProductClass")
 */
trait ProductClassTrait
{
  // フォームのオートレンダリング有効化し、自動でフォーム項目の追加
    /**
     * @ORM\Column(name="sale_rate", type="integer")
	 * @Eccube\FormAppend(
	 *     auto_render=true,
	 *     options={
	 *         "required"=true,
	 *	   "label": "販売掛率"
	 *     },
	 *	   type="\Symfony\Component\Form\Extension\Core\Type\TextType",
	 * )
     */
    public $sale_rate;
	
	
	/**
	 * @return integer
	 */
	public function getSaleRate()
	{
		return $this->sale_rate;
	}

	/**
	 * @param integer $sale_rate
     *
     * @return ProductClass
	 */
	public function setSaleRate($sale_rate)
	{
		$this->sale_rate = $sale_rate;
		return $this;
	}

}
// プロジェクト直下に移動
cd プロジェクトのパス

// Proxy作成
php bin/console eccube:generate:proxies

// キャッシュ削除
php bin/console cache:clear --no-warmup
// テーブルに反映(dtb_product_class テーブル に sale_rate カラムが追加される)
php bin/console doctrine:schema:update --dump-sql --force

src\Eccube\Resource\template\admin\Product\product.twig
をコピーし、
app\template\admin\Product\product.twig
に設置する

// 548 から587 行目辺り
// ここでフォームが表示される
{# エンティティ拡張の自動出力 #}
{% for f in form if f.vars.eccube_form_options.auto_render %}
	{% if f.vars.eccube_form_options.form_theme %}
		{% form_theme f f.vars.eccube_form_options.form_theme %}
		{{ form_row(f) }}
	{% else %}
		<div class="row">
			<div class="col-3">
				<span>{{ f.vars.label|trans }}</span>
			</div>
			<div class="col mb-2">
				<div>
					{{ form_widget(f) }}
					{{ form_errors(f) }}
				</div>
			</div>
		</div>
	{% endif %}
{% endfor %}
{% if has_class == false %}
	{% for f in form.class if f.vars.eccube_form_options.auto_render %}
		{% if f.vars.eccube_form_options.form_theme %}
			{% form_theme f f.vars.eccube_form_options.form_theme %}
			{{ form_row(f) }}
		{% else %}
			<div class="row">
				<div class="col-3">
					<span>{{ f.vars.label|trans }}</span>
				</div>
				<div class="col mb-2">
					<div>
						{{ form_widget(f) }}
						{{ form_errors(f) }}
					</div>
				</div>
			</div>
		{% endif %}
	{% endfor %}
{% endif %}

// 自動出力より上で、手動で表示も可能(上記の自動出力後では効かない)
{{ form_widget(form.class.sale_rate) }}
{{ form_errors(form.class.sale_rate) }}

※auto_renderをtrueにした場合、他の関連個所でも表示されるため注意が必要です