対象者
下記に一つでも該当する方
- Symfony2ってなにそれ?Symphonyちゃうの?
- PHP一応かけるよ(元java開発社)
- MVCの心得有り
...筆者がモデルケースとなっております。
3つのProviderを愛でることから始めましょう
いきなりですが、彼らの名前を覚えると、とりあえずはどこのソースが動いているかはわかります。
1.FrontControllerProvider
2.AdminControllerProvider
彼らの名前を見れば一目瞭然です、URLのルーティングを定義してくれているProvider様ですね。
名前からわかるように管理画面とフロント画面でさっくりわかっています。
とりあえずここを見れば今皆さんが見ている画面の裏で走っているロジックを
特定することができます。
3.EccubeServiceProvider
お次はこいつ。
なんでもつめ込まれている(気がする)$appに実際に色々詰めています。
- カート追加時のロジックみたいからのCartに紐づくServiceを呼び出したいな〜
- そそ、商品情報(Product)が欲しいからrepository出してよー
みたいなのに全て答えてくれます。
Sessionも持っています。
なので呼び出したいものが会った時一度このProviderを見てみて下さい。
※この$appはSilexのApplication、つまりPimpleなんですね。
この記事見て$appの使い方がわかった気がしました、えぇ、silexやpimpleも初見でしたとも。
http://iakio.hatenablog.com/entry/2014/02/13/233610
上記の3つを使いこなせば、処理のソースどこからみればわからんヲワタ\(^o^)/状態を
回避することができるはずです。
また、ECCube3の機能拡張は基本的にPluginという形で作成していきますが、
その際にも(大体の場合は)ServiceProviderを作成することになります。
自作のControllerにアクセスするためのURLを定義したりRepositoryもほいほい$appに登録しちゃって下さい!
event.dispatcherに歩み寄ってみましょう
本体のソースを見ていると時々出てくる彼。
こんな感じですね。
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_INDEX_INITIALIZE, $event);
これはプラグインのfunctionをここで実行できるよという意味になります。
上の例だと「カートに商品を追加したところだ、これから送料無料チェックするぞ!」というタイミングで
自作のプラグインのfunctionを実行できます。
プラグインの実行タイミングの定義は2種類あってどちらもevent.ymlにて定義します。
公式サイトでは"共通フックポイント", "個別フックポイント"と読んでいます。
http://downloads.ec-cube.net/src/manual/v3/plugin.pdf
開発するときはこんな流れでやってみるのはいかがでしょうか
(๑′ᴗ‵๑) < ドラゴンボールの商品今よー売れてるから、ドラゴンボール関連の商品3個以上買ってくれたら送料サービスしましょ!
開発者。。。(送料無料系か、、管理画面から指定した金額、個数を超えたら送料無料的な機能は確かあったな、、、)
開発者 <ドラゴンボールの商品というのは、"ドラゴンボール"のカテゴリが付いている商品という認識でよろしかったでしょうか?
(๑′ᴗ‵๑) <うんまぁそんな感じでたのんますわ!
開発者 <かしこまりました!
開発者。。。(まず知らんとあかんことは「どこで送料無料の計算が行われているか」や。商品の個数で送料無料にするか否か的なロジックをパクるオマージュするしか無いっしょ!
あ、確かカート画面で送料どうこうって書いてた気がする!)
=> カート画面へGO:開発者<送料無料のロジック発見!
開発者。。。(そういや優しい世界では3つのProviderを愛でよと書いてあったから見てみよう。)
FrontControllerProviderさんで/cart
で検索したら即あたり激アツ。
$c->match('/cart', '\Eccube\Controller\CartController::index')->bind('cart');
CartControllerのindexメソッドを見てみるとそこには開発者さんが探していた送料無料関連のロジックが、、!
ここらへんで処理したいときは、このタイミングやな!
$app['eccube.event.dispatcher']->dispatch(EccubeEvents::FRONT_CART_INDEX_INITIALIZE, $event);
あとはCartから商品情報を取得してよろしくやってしまいましょう!
まぁこんな感じでプロバイダーとフックポイントがわかっていればあとは
プラグインを作っていくだけですね!
また時間が作れれば次は続編書くかもです!
あとがき
ECCubeとは長きにわたって愛されてきた日本製のECサイト構築用オープンソース(株式会社ロックオン社(http://www.lockon.co.jp/ )が提供)です。
2007年以来の大型アップデートを行い2015年7月にEC-CUBE3.0がリリースされました。
http://www.ec-cube.net/product/info_3.php
すでにバージョン3.1.0になっており、今後もアップデートが続けられ末永く愛されていくであろうECCube3に関しまして、恩恵を受けている開発者の一人として貢献したく本記事の記載を決めたわけであります。
ぶっちゃけまだメジャーバージョンアップして一年も立っていないので記事やらトラブルシューティングがそこまで落ちていない状態なので、これからECCubeを触る開発者の方の少しでも役に立てればなと思っています。