【ECCUBE3】規格-分類登録が削除できない

ECCUBE3.14 で商品マスタに商品登録した後のお話しです。

規格マスタを登録し、その下の分類まで登録した後、商品マスタCSV一括登録から削除フラグを利用して商品を一括削除します。すると、商品自体は削除されます。その後「規格」と「分類」を削除しようとすると「商品に使用されている分類があります」という旨のメッセージが表示され、規格・分類の削除が出来なくなってしまいました。

参考になったサイト

ECCUBEは管理画面から商品やカテゴリ・規格を削除しても論理削除のみで物理削除はされないんですね。

またレコードの削除が出来なかったので、更新で論理削除フラグ(del_flg)を1に設定することで削除できました。

関連するテーブルは以下のようです。

  • dtb_class_name
  • dtb_class_category
  • dtb_product_class

で、テーブルを見てみるとdtb_class_name / dtb_product_classは論理削除フラグが1でしたので、こちら更新分で「update dtb_class_category set del_flg=1」dtb_class_category をdel_flg=1に更新。

すると規格の登録件数が(0)と表示され無事、管理画面-規格登録から削除できるようになりました。

 

 

【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プラグイン開発】商品をカートへ入れる際の重複チェック処理

カートへ商品を入れる際に、イベントフックで処理をしたいというときの実装方法とカート画面へのエラーラベル表示方法についてです。

因みに、ユーザ辺りに対する1商品の購入個数の上限制限は「商品マスター 」―「販売制限数」で設定できます。

“【ECCUBE3プラグイン開発】商品をカートへ入れる際の重複チェック処理” の続きを読む

【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プラグイン開発】開発時の備忘録

去年リリースされたらしい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からのルーティングコントロールをユーザ定義できるようになっているようです。