Weitere ähnliche Inhalte
Ähnlich wie 201803_EC-CUBE開発進捗説明会_3_カスタマイズ (20)
201803_EC-CUBE開発進捗説明会_3_カスタマイズ
- 3. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
3
概要
EC-CUBEの挙動をデフォルトから変更したい
• 拡張機構を利用した拡張
– カスタマイズディレクトリにPHPファイルを作成することで拡張できる
• プラグインによる拡張
• EC-CUBE本体のソースコード(./src)を変更
- 4. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
4
カスタマイズディレクトリ
カスタマイズディレクトリ
このディレクトリ以下にファイルを置くと、
自動的に認識する。
(現状はAcmeという仮のディレクトリ名前)
- 5. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
5
概要
• Controller
• Repository
• FormType
• Entity (*EC-CUBE独自)
• Service (*EC-CUBE独自)
• Symfonyの機能を使った拡張
※詳細な内容は、開発ドキュメントサイトに記載
- 6. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
6
Controller カスタマイズ
• 新しいルーティングを追加するときに利用
• コントローラ内で処理ロジックを書くことも可能(DB更新など)
• EntityManagerやFormFactoryなど、各種サービスを利用可能
• 参照 http://doc3n.ec-cube.net/customize_controller
class SamplePageController extends AbstractController
{
/**
* @Method("GET")
* @Route("/sample")
*/
public function testMethod()
{...}
- 7. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
7
Repository カスタマイズ
• 検索結果の並び順や条件をカスタマイズする時に利用。
• Repositoryクラスで実行するSQLをカスタマイズすることができる。
• 参照 http://doc3n.ec-cube.net/customize_repository
インターフェイス/クラス 概要
QueryCustomizer QueryBuilderを自由に変更
OrderByCustomizer ソート順を変更する
WhereCustomizer 検索条件を追加する
JoinCustomizer 結合するテーブルを追加する
class AdminProductListCustomizer extends OrderByCustomizer
{
/**
* 常に商品IDでソートする。
*/
protected function createStatements($params, $queryKey)
{
return [new OrderByClause('p.id')];
}
- 8. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
8
FormType カスタマイズ
• フォームの項目を入力必須にするなどのカスタマイズ時に利用。
• 既存のFormTypeを置き換えたり、オプションを変更できる。
• SymfonyのFormExtensionの仕組みを利用している。
• 参照 http://doc3n.ec-cube.net/customize_formtype
class CompanyNameRequiredExtension extends AbstractTypeExtension
{
public function buildForm(FormBuilderInterface $builder, array $options)
{
$options = $builder->get('company_name')->getOptions();
$options['required'] = true; // 入力必須にする
$options['constraints'] = [ new NotBlank() ]; // 空の入力NGのアサーション追加
$options['attr']['placeholder'] = ‘会社名’; // プレースホルダー追加
$builder->add('company_name', TextType::class, $options);
}
- 9. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
9
Entity カスタマイズ (EC-CUBE独自)
• 商品や会員情報に項目を追加したいときに利用。
• traitの仕組みを使うことで、既存のテーブルにフィールドを追加できる。
• 拡張したフィールドは、既存のフィールドと同じようにアクセス可能。
• 参照 http://doc3n.ec-cube.net/customize_entity
/**
* @EntityExtension("Eccube¥Entity¥Product")
*/
trait ProductTrait
{
/**
* @ORM¥Column(type="string", nullable=true)
*/
public $maker_name;
# Proxy クラスを生成
bin/console eccube:generate:proxies
# 実行する SQL を確認
bin/console doctrine:schema:update --dump-sql
# SQL を実行
bin/console doctrine:schema:update --dump-sql --force
- 10. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
10
Service カスタマイズ (EC-CUBE独自)
購入フローまわりのカスタマイズの難易度を下げる仕組み。
参照 http://doc3n.ec-cube.net/customize_service
▼カート(Cart)
• 同じ商品・同じ商品規格でも別々の明細に分割する(CartItemComparator)
– ギフトラッピングなどの商品オプションを追加するカスタマイズ
• 支払方法が異なる商品を同時にカートに入れられるようにする(CartItemAllocator)
– 予約商品など、 同時にカートに投入したいが、別々に決済したい(注文を分けたい) といったカスタマイズ
▼購入フロー(PurchaseFlow)
• 送料計算のカスタマイズなどで利用可能
• 本体でもポイント機能の実装で利用している
• 3.nではフロント/管理画面で共通化
- 11. Copyright © LOCKON CO.,LTD.All Rights Reserved.
本体カスタマイズ機構
11
Symfonyの機能を使った拡張
SymfonyやDoctrineが提供している拡張機構を利用可能。
参照 http://doc3n.ec-cube.net/customize_symfony
• Symfony Event
• Command
• Doctrine Event
- 13. Copyright © LOCKON CO.,LTD.All Rights Reserved.
EC-CUBE 3.n 開発ドキュメント
13
• EC-CUBE 3.n をカスタマイズして利用される方向けのドキュメントを整備中。
http://doc3n.ec-cube.net/