スポンサーリンク

EC-CUBE3 既存項目のカスタマイズ プラグイン版

スポンサーリンク

今回はEC-CUBE3で既存項目に対して、属性を変更する方法を紹介します(プラグイン版)。例えば、商品の商品コードを必須化などは、基幹システムとの連携を考慮すると要望があがりやすいですね。
という事で、商品コードを必須項目とする方法です。

方法はプラグインを使用する方法とEC-CUBE本体のソースを変更する2通りがあります。プラグインで対応する方法は、EC-CUBE本体を変更しないため、EC-CUBE自体のバージョンに強いですが、作成・変更するファイルが増えます。一方、EC-CUBE本体のソースを変更する方法は、修正箇所は少ないですが、EC-CUBEのバージョンアップ時に、修正箇所が影響するかを考慮してバージョンアップを行う必要があります。状況に併せて対応方法を選択してください。

※本記事はEC-CUBE3.0.16をベースに記載しております。

本記事では、プラグインで対応する方法を紹介します。
以降はプラグインコードが「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クラスを登録します。

以上です。

コメント