SlideShare ist ein Scribd-Unternehmen logo
1 von 24
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
○ フォームを送信する前や後の任意のタイミングで、
入力フォームを拡張することができます。
○ 定義されているすべてのフォームに対して拡張が可能です。
<form action=”~”>
<input type=”~” />
<select name=”~”>
<option></option>
</select>
<button>submit</button>
</form>
$builder
->add(‘name’,
‘text’)
->add(‘age’,
‘choice’)
->add(‘submit’,
‘button’);
任意の拡張 任意の拡張
プラグインでできること
● ビューの書き換え: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;
}));
}

Weitere ähnliche Inhalte

Ähnlich wie EC-CUBE3プラグイン仕様

Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
Ayumu Kawaguchi
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
Atsuhiro Kubo
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
Naruto TAKAHASHI
 
130329 04
130329 04130329 04
130329 04
openrtm
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
openrtm
 
NetBeans plugin for wordpress
NetBeans plugin for wordpressNetBeans plugin for wordpress
NetBeans plugin for wordpress
Junichi Yamamoto
 

Ähnlich wie EC-CUBE3プラグイン仕様 (20)

Ec cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナーEc cube開発合宿 プラグインセミナー
Ec cube開発合宿 プラグインセミナー
 
MakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発をMakeGoodで快適なテスト駆動開発を
MakeGoodで快適なテスト駆動開発を
 
pf-1. Python,Google Colaboratory
pf-1. Python,Google Colaboratorypf-1. Python,Google Colaboratory
pf-1. Python,Google Colaboratory
 
EC-CUBEプラグイン講義
EC-CUBEプラグイン講義EC-CUBEプラグイン講義
EC-CUBEプラグイン講義
 
NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法NPAPIを使ったandroid標準ブラウザの拡張方法
NPAPIを使ったandroid標準ブラウザの拡張方法
 
Geeklog2.1新機能紹介 20140723
Geeklog2.1新機能紹介 20140723Geeklog2.1新機能紹介 20140723
Geeklog2.1新機能紹介 20140723
 
1_各Atlassian製品の紹介
1_各Atlassian製品の紹介1_各Atlassian製品の紹介
1_各Atlassian製品の紹介
 
Git & ブランチモデルで学ぶ バージョン管理入門
Git & ブランチモデルで学ぶ バージョン管理入門Git & ブランチモデルで学ぶ バージョン管理入門
Git & ブランチモデルで学ぶ バージョン管理入門
 
130329 04
130329 04130329 04
130329 04
 
20130329 rtm4
20130329 rtm420130329 rtm4
20130329 rtm4
 
20190219 hyperledger tokyo_meetup_min_bft
20190219 hyperledger tokyo_meetup_min_bft20190219 hyperledger tokyo_meetup_min_bft
20190219 hyperledger tokyo_meetup_min_bft
 
Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門Cloud Foundry Cli Plugin入門
Cloud Foundry Cli Plugin入門
 
QCon北京2015 sina jpool-微博平台自动化运维实践
QCon北京2015 sina jpool-微博平台自动化运维实践QCon北京2015 sina jpool-微博平台自动化运维实践
QCon北京2015 sina jpool-微博平台自动化运维实践
 
Quickcursorに見る、アプリケーション間通信
Quickcursorに見る、アプリケーション間通信Quickcursorに見る、アプリケーション間通信
Quickcursorに見る、アプリケーション間通信
 
VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011 VCS - Version Control System at Security and Programming camp 2011
VCS - Version Control System at Security and Programming camp 2011
 
NetBeans plugin for wordpress
NetBeans plugin for wordpressNetBeans plugin for wordpress
NetBeans plugin for wordpress
 
20080524
2008052420080524
20080524
 
はじめてのCodeIgniter
はじめてのCodeIgniterはじめてのCodeIgniter
はじめてのCodeIgniter
 
Oprol_Engine_pitch_v1_final
Oprol_Engine_pitch_v1_finalOprol_Engine_pitch_v1_final
Oprol_Engine_pitch_v1_final
 
Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中Code igniterでテスト駆動開発 資料作成中
Code igniterでテスト駆動開発 資料作成中
 

Mehr von Shinichi Takahashi

フロントエンドフレームワークの選び方 - 20170320
フロントエンドフレームワークの選び方 - 20170320フロントエンドフレームワークの選び方 - 20170320
フロントエンドフレームワークの選び方 - 20170320
Shinichi Takahashi
 

Mehr von Shinichi Takahashi (18)

BIT VALLEY 2019 - クラウド時代のエンジニア生存戦略
BIT VALLEY 2019 - クラウド時代のエンジニア生存戦略BIT VALLEY 2019 - クラウド時代のエンジニア生存戦略
BIT VALLEY 2019 - クラウド時代のエンジニア生存戦略
 
(Un)ManagedBlockchain
(Un)ManagedBlockchain(Un)ManagedBlockchain
(Un)ManagedBlockchain
 
ここがつらいよ サーバーレス
ここがつらいよ サーバーレスここがつらいよ サーバーレス
ここがつらいよ サーバーレス
 
20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code20171005 告白に学ぶ http status code
20171005 告白に学ぶ http status code
 
「関心事」と「責務」 の お話
「関心事」と「責務」 の お話「関心事」と「責務」 の お話
「関心事」と「責務」 の お話
 
ぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまでぼくがAthenaで死ぬまで
ぼくがAthenaで死ぬまで
 
フロントエンドフレームワークの選び方 - 20170320
フロントエンドフレームワークの選び方 - 20170320フロントエンドフレームワークの選び方 - 20170320
フロントエンドフレームワークの選び方 - 20170320
 
AWS新サービス活用事例
AWS新サービス活用事例AWS新サービス活用事例
AWS新サービス活用事例
 
PHPerだってMicroservicesしたい!
PHPerだってMicroservicesしたい!PHPerだってMicroservicesしたい!
PHPerだってMicroservicesしたい!
 
Let’s make elastic cms together!
Let’s make elastic cms together!Let’s make elastic cms together!
Let’s make elastic cms together!
 
事例から見るTwilio活用法
事例から見るTwilio活用法事例から見るTwilio活用法
事例から見るTwilio活用法
 
PHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さPHPから離れて感じるPHPの良さ
PHPから離れて感じるPHPの良さ
 
♡PHPが恋しい話♡
♡PHPが恋しい話♡♡PHPが恋しい話♡
♡PHPが恋しい話♡
 
IoTの原点
IoTの原点IoTの原点
IoTの原点
 
Web開発の 今までとこれから
Web開発の 今までとこれからWeb開発の 今までとこれから
Web開発の 今までとこれから
 
Symfonyコンポーネントで生まれ変わるEC-CUBE
Symfonyコンポーネントで生まれ変わるEC-CUBESymfonyコンポーネントで生まれ変わるEC-CUBE
Symfonyコンポーネントで生まれ変わるEC-CUBE
 
難しいよね、コードレビュー
難しいよね、コードレビュー難しいよね、コードレビュー
難しいよね、コードレビュー
 
日常に見るUI/UX
日常に見るUI/UX日常に見るUI/UX
日常に見るUI/UX
 

EC-CUBE3プラグイン仕様