プラグイン機能について、実際に作成した感想や要望、意見を下記スレッドに
五月雨で記載してしまっていたので、本スレッドにまとめます。
(開発合宿に参加したかったのですが、参加でき無そうなので皆様の作業叩き台としてお考えいただければ幸いです)
【リリース】EC-CUBE2.12.0 α版をリリースいたしました
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=10155&forum=14【EC-CUBE2.12】プラグイン機能
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=9756&forum=142.12.0α公開後、プラグインを10件ばかり検討、作成してみました。
プラグイン化が出来たのが5件ほどです。
プラグイン化が出来なかった5件で出てきた障壁、問題を列挙していきたいと思います。
1.「元の処理のDBアクセス時と同時に行わせたい処理」
行き詰った点としては、「DBアクセス時に同時に行わせたい処理」をどう実現するかです。
対象フックポイント[lc_page_products_review_action_complete]
lfRegistRecommendDataで書き込まれたレコードにIPをUPDATEするという処理をプラグインで実装する予定でした。
ただ、lfRegistRecommendDataで発行されるreview_idは、関数の変数に格納される為、review_idの判断がプラグイン側で出来ません。
現在シーケンス値と書き込み内容や性別などから推測は出来るものの、少し気持ちが悪いです。
このように、「DBアクセス時に同時に行わせたい処理」に関してプラグインで行うのは難しいと考えてよろしいでしょうか。
(可能な場合もあるが)
2.プラグイン制作者向けのユーティリティ
本スレッドに書いてあること以外で気になるのはdtb_csvへのインサート時のNoについてです。
最新のNoを取ってやるべきかと思いますが、現在はテストプラグインなので固定で書いてます。
プラグイン作成する場合は結構多用すると思うので、標準で用意して頂けると助かります。
3.フックポイントに、書き換え型があると便利
イメージ的には下記のようになります。
class A{
function action(){
---フックポイント:a_action_start---
(処理)
---フックポイント:a_Local関数_modify--- ←このフックポイントに登録している関数はLocal関数の代わりに呼び出す とか
this->Local関数();
(処理)
---フックポイント:a_action_end---
}
function Local関数(){
(処理)
}
}
4.Local関数にもフックポイントがあると便利
イメージ的には下記のようになります。
class A{
function action(){
---フックポイント:a_action_start---
(処理)
this->Local関数();
(処理)
---フックポイント:a_action_end---
}
function Local関数(){
---フックポイント:a_Local関数__start---
(処理)
---フックポイント:a_Local関数__end---
}
}
5.outputfilterTransformで$smarty->_current_fileが空
SC_View outputfilter_transformにて、フックポイント'outputfilterTransform'に登録する箇所です。
$smarty->_current_fileをoutputfilterTransformの引数に登録していますが、$smarty->_current_fileが
コンパイル時にしか入らなそうな変数なので、outputfilterTransformにテンプレートファイル名が渡ってきません。
(※_current_file変数に代入する箇所は、Smarty_Compiler _compile_file関数のみ)
outputfilter_transformでHTMLを変換する場合は、$this->objPageからクラス名やViewを判断して作業した方がよろしいでしょうか?
例:管理者画面全体に関わるものであれば、Viewクラスで判定し、特定画面であれば、Pageクラスで判定するような形
6.画面への項目追加時の項目チェック
プラグインで画面に項目を追加したいパターンでは、項目のチェック(数値、範囲、エラーなどの)を行う必要がありますが
現在のパラメータチェックの機構では、プラグインで追加した項目を追加でチェックする事が出来ないと思われます。
lfInitParamにフックポイントが無く、lfCheckError_Editがエラー情報をInitしているので。
7.SC_XXXXXクラスで行われている処理をフック出来ない。
現状のソースで考えると、SC_XXXXXクラス処理をフック出来ないとなると、プラグインで出来る事が
画面追加系プラグインや単一画面内での簡単な処理中心となります。
----------------
EC CUORE 株式会社クオーレ
カスタマイズ御相談下さい。