今回はEC-CUBE3で既存項目に対して、属性を変更する方法を紹介します(プラグイン版)。例えば、商品の商品コードを必須化などは、基幹システムとの連携を考慮すると要望があがりやすいですね。
という事で、商品コードを必須項目とする方法です。
方法はプラグインを使用する方法とEC-CUBE本体のソースを変更する2通りがあります。プラグインで対応する方法は、EC-CUBE本体を変更しないため、EC-CUBE自体のバージョンに強いですが、作成・変更するファイルが増えます。一方、EC-CUBE本体のソースを変更する方法は、修正箇所は少ないですが、EC-CUBEのバージョンアップ時に、修正箇所が影響するかを考慮してバージョンアップを行う必要があります。状況に併せて対応方法を選択してください。
本記事では、プラグインで対応する方法を紹介します。
以降はプラグインコードが「Customize」であることを前提として記載しています。事前にプラグインジェネレータを使用してプラグインを追加してください。プラグインジェネレータは本家サイト(http://doc.ec-cube.net/plugin_tutorial-generate)を参照してください。
プラグインで対応する方法
FormExtensionの仕組みを利用して、定義済みの商品コード項目を再作成します。
追加するプログラム:app/Plugin/Customize/Form/Extension/Admin/ProductClassTypeExtension.php
<?php
namespace Plugin\Customize\Form\Extension\Admin;
use Symfony\Component\Form\AbstractTypeExtension;
use Symfony\Component\Form\FormBuilderInterface;
use Symfony\Component\Validator\Constraints as Assert;
class ProductClassTypeExtension extends AbstractTypeExtension
{
/**
* {@inheritdoc}
*/
public function buildForm(FormBuilderInterface $builder, array $options)
{
$builder
->remove('code')
->add('code', 'text', array(
'label' => '商品コード',
'constraints' => array(
new Assert\NotBlank(),
),
));
}
public function getExtendedType()
{
return 'admin_product_class';
}
}
ここでは、removeメソッドで商品コードの定義を削除後、再度addメソッドで商品コードを追加しています。
getextendedTypeメソッドでは、ProductClassTypeクラスのgetNameメソッドの戻り値と同じ値を戻します。
修正するプログラム:ServiceProvider(CustomizeServiceProvider)
class CustomizeServiceProvider implements ServiceProviderInterface
{
public function register(BaseApplication $app)
{
// FormExtension
$app['form.type.extensions'] = $app->share($app->extend('form.type.extensions', function ($types) use ($app) {
$types[] = new \Plugin\Customize\Form\Extension\Admin\ProductClassTypeExtension();
return $types;
}));
ここでは、追加したFormExtensionクラスを登録します。
以上です。

コメント