今回は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クラスを登録します。
以上です。
コメント