612 Views
November 17, 22
スライド概要
EC-CUBE3 プラグイン仕様
目次 1) プラグインでできること a) 新規ページの作成 b) 既存機能の拡張・変更 i) フックポイント:Middleware ii) 入力フォームの拡張:FormEvent iii) ビューの書き換え:FilterResponse 1) プラグインの作り方 a) 命名規則 b) 最低限必要なファイル構成 c) 新規ページの作成方法 d) 既存機能の拡張・変更方法 i) フックポイント:Middleware ii) 入力フォームの拡張:FormEvent iii) ビューの書き換え:FilterResponse 1) プラグインのライセンス 2) 参考文献
プラグインでできること
プラグインでできること ● 新規ページの作成 プラグインから独自のページを定義することができます。 ● 既存機能の拡張・変更 アプリケーション全体の処理の前後や、特定の処理の前後に 処理を介入させることができます。
プラグインでできること ● フックポイント:Middleware ○ アプリケーション全体の処理の前後・特定のページの処理の前後に 処理を介入させることができます。 ○ 全てのControllerに対して介入が可能です。 ○ 決済処理のタイミングで、決済情報に介入が可能です。 EC-CUBE プラグイン処理 プラグイン処理 HTML
プラグインでできること ● 入力フォームの拡張:FormEvent ○ フォームを送信する前や後の任意のタイミングで、 入力フォームを拡張することができます。 ○ 定義されているすべてのフォームに対して拡張が可能です。 $builder <form action=”~”> <input type=”~” /> <select name=”~”> <option></option> </select> <button>submit</button> ->add(‘name’, ‘text’) ->add(‘age’, ‘choice’) ->add(‘submit’, ‘button’); 任意の拡張 </form> 任意の拡張
プラグインでできること ● ビューの書き換え:FilterResponse ○ Responseが返却される描画される直前のHTTP HeaderやBodyを 書き換えることができます。 ○ 管理画面のナビゲーションを拡張することができます。 ○ HTMLだけでなく、JSONで返却したいなどの変更も可能です。 EC-CUBE プラグイン処理 HTML
プラグインの作り方
プラグインの作り方 ファイル構成 ● {PluginName} ● config.yml ● event.yml ● Migration ○ Version{YYYYmmddHHiiss}.php ● {EventName}.php ● PluginManager.php
プラグインの作り方 config.yml プラグイン全体の設定ファイルを記述します。 【設定項目】 ● name インストール後に表示されるプラグイン名です。(任意の文字) ● version インストール後に表示されるバージョンです。(任意の文字) バージョンアップ管理を行う際にご活用ください。 ● code オーナーズストアがプラグインを識別するコードです。 (英数字/オーナーズストア内で一意) ● event イベントの業務処理ファイル名を記述してください。 後述の `{EventName}.php` が読み込まれます。 ● service イベント以外の任意のロジックを読み込ませるファイルを指定できます。 (Yaml配列/複数指定可能) こちらに記述したファイルが `ServiceProvider` ディレクトリ以下から読み込まれます。 ● orm.path DoctrineORMの定義ファイルの配置ディレクトリを記述してください。
プラグインの作り方 event.yml 利用するイベントを定義するファイルです。 【フォーマット】 {HookPointName}: - [{MethodName}, {Priority}] - [{MethodName}, {Priority}] ● ● ● HookPointName 利用するフックポイント名を記述してください。 MethodName Eventファイルの中の、メソッド名を記述してください。 Priority FIRST / NORMAL / LATEを指定してください。
プラグインの作り方 Migration/Version{YYYYmmddHHiiss}.php データ移行用ファイルです。 PluginManager.php からプラグインインストール/アンインストール時に呼ばれます。 テーブル作成・削除、データの挿入に利用できます。 {EventName}.php フックポイントや入力フォーム拡張時に呼ばれるファイルです。 フックポイントや入力フォームの拡張をする際の、業務処理を記述します。 PluginManager.php EC-CUBEがプラグインを管理するファイルです。 プラグインインストール/アンインストール時に呼ばれます。 Migration はこのファイルから呼び出します。
プラグインの作り方 プラグイン基本設定 新規のページを追加する場合も、既存機能や画面の拡張を行う場合も、 まずはプラグイン情報を基本設定ファイルに記述する必要があります。 1. config.ymlの作成 まず config.yml を作成し、プラグイン情報を入力します。 name , code , version を記載してください。 yml:config.yml name: カテゴリーコンテンツ code: CategoryContent version: 1.0.0 必要に応じて、 ファイル構成に沿って追記してください。
新規ページの作成方法
プラグインの作り方 新規ページの作成方法 config.yml に service を記載します。 yml:config.yml name: カテゴリーコンテンツ code: CategoryContent version: 1.0.0 service: - PluginServiceProvider この記述によって /{PluginName}/ServiceProvider/PluginServiceProvider.php が呼び出されるようになります。
新規ページの作成方法 PluginServiceProvider.php <?php namespace Plugin¥{PluginName}¥ServiceProvider; use Eccube¥Application; use Silex¥Application as BaseApplication; use Silex¥ServiceProviderInterface; class PluginServiceProvider implements ServiceProviderInterface { public function register(BaseApplication $app) { } public function boot(BaseApplication $app) { } }
新規ページの作成方法
register() に以下のように記載することで、新しくルーティングが定義されます。
src/Eccube/ControllerProvider/FrontControllerProvider.php と同様に、
コントローラーとメソッドを記述する方式と、クロージャを使う方式が利用できます。
public function register(BaseApplication $app)
{
// コントローラーとメソッドを記述する方式
$app->match(
'/sample',
'¥¥Plugin¥¥{PluginName}¥¥PluginController::sample'
)->bind('sample');
// クロージャを使う方式
$app->get(
'/sample/{id}',
function (Application $app, $id) {
return 'sample id:' . $id;
}
)
->assert('id', '¥d+')
->bind('get_sample');
}
コントローラーとメソッドを記述する方式では、記述したコントローラーの内部で、
自由に業務ロジックを記載することができます。
既存機能の変更・拡張
既存機能の変更・拡張 フックポイント:Middleware 特定の処理の前後に処理を介入させられる仕組みです。 【特定の処理】 ● アプリケーションの開始時・終了時 ● コントローラーの呼び出し時・終了時 ● 決済処理時
既存機能の変更・拡張 フックポイントを使って処理を介入させるには、 event.yml に以下の項目を定義します。 ● ● ● 利用するフックポイント メソッド名 優先順位 (NORMAL / FIRST / LAST) eccube.event.controller.admin_product_category_edit.after: - [onAdminProductCategoryEditAfter, NORMAL] ここに記述したメソッドは、 config.yml 内の event に記載したファイルから呼ばれます。 config.yml に event 項を追加してください。 name: カテゴリーコンテンツ code: CategoryContent version: 1.0.0 event: event このように記述することで /Plugin/{PluginName}event::onAdminProductCategoryEditAfter が呼ばれるようになります。 このメソッド内で介入させたい処理を記述してください。
既存機能の変更・拡張 入力フォームの拡張:FormEvent フォームを送信する前や後の任意のタイミングで、入力フォームを拡張することができます。 /src/Eccube/Form/Type に定義されているすべてのフォームに対して拡張が可能です。 以下のタイミングを自由に使うことができます。 ● ● ● ● ● PRE_SET_DATA POST_SET_DATA PRE_SUBMIT SUBMIT POST_SUBMIT FormEventを利用する際は、 config.yml に form 項を追加してください。 form 項には、ファイル名とイベント名を記載します。順番に気をつけてください。 form: - onPreSetData: SampleForm 以上のように記載することで、 SampleForm::onPreSetData が呼ばれます。
既存機能の変更・拡張
入力フォームの拡張:FormEvent
フォームを拡張するイベントは、全てのフォームに対して呼び出されるので、適用するフォームを限
定したいときは、
以下のように、 `$event->getForm()` にて、フォーム名を取得してください。
<?php
namespace Plugin¥SampleForm;
use Symfony¥Component¥Form¥FormEvent;
class SampleForm
{
public function onPreSetData(FormEvent $event)
{
$form = $event->getForm();
if ('contact' === $form->getName()) {
$form->add('sample_form', 'text');
}
}
}
既存機能の変更・拡張
ビューの書き換え:FilterResponse
描画されるコンテンツや、ヘッダを書き換えることができます。
また、管理画面のナビゲーションを拡張することができます。
EC-CUBE内部では、フックポイントと同様の仕組みを利用しています。
config.yml , event.yml に必要な情報を記載してください。
このフックポイントでは、 FilterResponseEvent が渡されます。
public function onRenderBefore(FilterResponseEvent $event)
{
$request = $event->getRequest();
$response = $event->getResponse();
$html = $response->getContent();
/*
* ここで$htmlを書き換える
*/
$response->setContent($html);
$event->setResponse($response);
}
既存機能の変更・拡張
管理画面:メニューの追加
管理画面の左メニューを簡単に追加することができます。
EC-CUBE本体でYamlを解析しており、そこに介入が可能です。
新規ページの作成時と同じく、 ServiceProvider の register() に記述します。
受注管理の一番後ろに追加する場合は以下のように記述してください。
public function register(BaseApplication $app)
{
$app['config'] = $app->share($app->extend('config', function ($config) {
$config['nav'][1]['child'][] = array(
'id' => 'order_sample',
'name' => 'サンプル',
'url' => 'sample',
);
return $config;
}));
}