ECCUBE3

【ECCUBE3】プリントパックのようなデータ入稿用プラグイン

ECCUBE2までは入稿用プラグインがあるようでしたが、ECCUBE3にはプラグインがなかったのでデータ入稿用プラグインを作成してみました。画面がプラグイン対応してなかったりするので、マーケットには載せれないと思いますが、そのうちデモサイトを作ってみます。

 

【ECCUBE3プラグイン開発】画面エラーメッセージの変更や表示の仕方

ECCUBE3の画面エラーメッセージの定義ファイルは、
『src/Eccube/Resource/locale/message.ja.yml』 にて定義されています。

画面に表示するエラー内容や、メッセージ内容をここで定義追加しても大丈夫ですし、書き換えも可能です。
またプラグインで作成する場合は、
Plugin\[プラグイン名]\Resource\locale\message.ja.yml
を別途用意して再定義しましょう。

プラグイン側でのエラー設定の仕方

プラグインソース内でのエラーの設定方法はsetError()を使用します。

$app[‘eccube.service.cart’]->setError(‘cart.product.not.status’);

 

 

【ECCUBE3プラグイン開発】プラグインリリース時のzip圧縮の方法

プラグインをtar.gzやzip圧縮したのに、管理画面―プラグイン一覧からインストールしようとすると『config.yml not found or syntax error』が表示されてインストールできない場合があります。

同じような問題で悩んでいる方がこちらにもおりました。

開発前・開発中のプラグインであればコンソールからインストールする方法があります。


php app/console plugin:develop enable --code <対象のプラグインコード>

zip圧縮する際は、ディレクトリ構成を全選択して『送る』でzip圧縮をかけるといいです。プラグイン名の親ディレクトリを含めると解凍時に、config.ymlがプラグインディレクトリ直下に配置されず、タイトルのようなエラーとなるようです。

 

【ECCUBE3プラグイン開発】イベントフックについて

こちら『EC-CUBEのプラグインを作る(3.0.9向け)』を参考に記載していきます。イベントフックはconfig.ymlでイベントクラスを定義し、event.ymlでフックとなるイベント名と関数名を登録したら、関数定義を行います。

config.yml

name: カテゴリコンテンツプラグイン
code: CategoryContent
version: 1.0.0
event: CategoryContentEvent 
event: xxxx という記載で、イベントフックされた先のクラスを指定しています。
event.yml
admin.product.category.index.initialize: 
 - [onAdminProductCategoryInit, NORMAL] 

この定義では、function onAdminProductCategoryInit(EventArgs $event) を定義する事となります。
イベントフックは引数として、『EventArgs $event』を持ちます。
この引数の中身は、dispatchコールされる直前で設定して決めているようです。
/src/Controller/各コントローラ.php の ソース内では、$app[‘eccube.event.dispatcher’]->dispatch(イベント名定義, $event) となっています。
どのようなパラメータが来るのかは、ECCUBEオリジナルの dump() を利用して実行させてパラメータ内部を表示させるか、上記dispatchコール直前の変数を確認する方法があります。

パラメータを取得する

dispatchコール直前の$event 設定部分を見ると、パラメータがkey – value 形式で格納されていることが分かります。以下の様に、keyを指定することでパラメータを取得することができます。

$parameter = $event->getArgument(‘Order’);

また、処理中に追加したいパラメータがあれば setArgument($parameter) でセットしなおしてあげます。

 

【ECCUBE3プラグイン開発】フック一覧について

2.フック一覧について

WordPressのアクションフッのようなフック機能があるそうです。実装していて思ったのがこのフック一覧がほしいと言う事。私の方で一覧を見つけたので整理してみます。ECCUBE3の内部で処理中に割り込みの為のフックを入れるには以下のようなタイミングがあるようです。どの処理のどのタイミングにフックが可能かというのは、src/Controller/各Controller のソースに記載されており、例えばCartController.phpのindex()には、FRONT_CART_INDEX_INITIALIZEとFRONT_CART_INDEX_COMPLETEが定義されています。これらの定義元がsrc/Event/EccubeEvents.phpに定義されているので、参照すると以下のようなイベント記載が可能となります。Yaml形式で定義を書きますので、スペースやインデントに注意して記載していってください。

続きを読む

【ECCUBE3プラグイン開発】開発時の備忘録

去年リリースされたらしいECCUBE3のプラグインを開発していたのでいろいろなポイントを記載しておきたく思います。

  1. プラグイン開発前に
  2. フック一覧について
  3. イベントフックについて
    1. getArguments
  4. テンプレートのフックについて
    1. getParameters
  5. ルーティングについて
  6. 画面エラーメッセージの変更や表示の仕方
  7. ページを追加する方法
  8. ルーティング・Controller・twig追加後、DBレコード追加
  9. サーバ側制御(Controller)を追加する
    1. redirect
  10. ユーザ認証判定
  11. テンプレート読み込み(renderView)
  12. Ajaxを実装する
  13. テンプレート(twig)の記載方法について
    1. ifによる分岐
    2. forによるループ
    3. コメント
    4. URLリンク
  14. カートの中身を制御する(購入品目数・個数制御)
  15. ブラック会員
  16. プラグインインストール時
    1. データベース/テーブルの作成方法
  17. プラグインリリース時のzip圧縮の方法
  18. プラグイン削除時(初期化)
  19. メールテンプレート反映
  20. メール送信方法
  21. 主なENTITY
    1. Order, Customer, app->user, Shipping

1.プラグイン開発前に

先に、参考にさせて頂いたサイトを記載しておきます。

  1. EC-CUBEのプラグインを作る(3.0.9向け)
  2. [Done]EC-CUBE3のプラグインを2日でつくる – 1日目
  3. 【ECCUBE3】3.0.9で新しくなったプラグインのフックポイント
  4. 【EC-CUBE3】プラグインを有効化した時にブロックを生成するプラグインの作り方

「1.EC-CUBEのプラグインを作る(3.0.9向け)」が一番基本的で参考になりましたが、これをそのまま実装しても動きません。リンク先記事のコメントに記載されているようにメソッドの名前を修正してあげてください。

「onFormInitializeAdminProductCategory」→「onAdminProductCategoryInit」

DB・それのDIとしてのEntity定義や、プラグインのインストール・アンインストール時のDB制御の挙動を記載できます。

event.ymlと言うファイルでWordPressのアクションフック・フィルターフックのような定義をする個所のようです。

また、CategoryContentServiceProvider.php では、参考サイトではEntityの登録しかしていませんが、URIからのルーティングコントロールをユーザ定義できるようになっているようです。