WEBサイト制作・アプリ開発・システム開発・ブランディングデザイン制作に関するご相談はお気軽にご連絡ください。
構想段階からじっくりとヒアリングし、お客様の課題にあわせたアプローチ手法でお客様の“欲しかった”をカタチにしてご提案いたします。
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にした場合、他の関連個所でも表示されるため注意が必要です