id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	modified_flg
1603	プラグイン機能（エンジン部分）	kotani	h_yoshimoto	"プラグイン機能開発のうち、エンジン部分の開発。[[BR]]
親チケット #494 プラグイン機能

=== 開発機能一覧 ===
 - 各プラグインから各フックポイントに対して処理を登録する機能
 - 各プラグインが各フックポイントに登録した処理を実行するディスパッチャ機能
 - 各プラグインに用意する差し込みテンプレートを標準テンプレートに差し込んで生成するトランスフォーマー機能

=== 簡易仕様 ===
{{{
■ プラグイン機能 ■
★簡単なサンプルのプラグインを添付しておりますので、実際に処理を追って頂ければと思います。

▼ 処理の介入
・処理への介入はフックポイント（ローカルフックポイント、スーパーフックポイント）を使用します。
・プラグインにregist()関数を定義し、介入したい箇所のフックポイントと、コールバック関数をセットします。

　　▽実行タイミング
　　・フックポイント通過時にSC_Helper_Pluginが呼ばれ、有効なプラグインのシングルトンインスタンを生成します
　　・SC_Helper_Pluginは全ての有効なプラグインのインスタンを生成し、フックポイントに応じてセットされているコールバック関数を実行します。

　　▽フックポイント
   　　- スーパーフックポイント
       　・全てのページクラスで実行されます。
      　 ・使用する際は、関数(preProcess, process)を定義します。
       　・LC_Page、LC_Page_AdminのpreProcess, process通過時に実行されます。
   　　- ローカルフックポイント
      　 ・特定のページの特定箇所で呼び出されるフックポイントでです。使用するにはregist関数を定義します。
    　　 ・regist関数にフックポイント、コールバック関数を指定します。
      　 ・指定したフックポイント通過時に指定のコールバック関数が実行されます。

▼ テンプレートの変更
・テンプレートファイルを解析し、プラグイン側の処理に従って要素を追加、削除し、再度テンプレートを生成します。
・生成されたテンプレートはキャッシュファイルとして配置されます
・ページを読み込む際に、該当ページにキャッシュファイルがある場合、キャッシュファイルを表示します。

・テンプレートに変更を加える場合はplugin側にsetTemplateTransformer関数を定義します。
   - setTemplateTransformer関数内には変更するテンプレートの指定、変更箇所(要素)の指定、変更内容を記述したテンプレートの指定を記述します。
・インストール/アンインストール(テンプレート再生成)時に、有効なプラグインのsetTemplateTransformer関数が実行されます。
・変更処理の加わったテンプレートがtemplates_cache/に生成されます。
・Pageクラスはtemplates_cache/以下にキャッシュファイルがある場合はそちらを優先して表示します。

■ ディレクトリ構成 ■

  - data/ -+- class/  -+- helper/    -+- SC_Helper_Plugin.php (プラグインヘルパークラス)
                       |
                       +- plugin/    -+- SC_Plugin_Template_Selector.php       (DOMを使用してテンプレートを生成するセレクタクラス)
                       |              +- SC_Plugin_Template_Transform_List.php (トランスフォーマーを管理するクラス)
                       |              +- SC_Plugin_Template_Transformer.php    (トランスフォーマー)
                       |
                       +- downloads/ -+- plugin/ -+- 【各プラグインディレクトリ】 -+- プラグインコード.php (プラグインのメインクラスファイル)
                                                                                   +- config.php (設定画面)
                                                                                   +- logo.png (プラグインロゴ)
                                                  +- templates_cache/ (キャッシュ格納用ディレクトリ)
                                                  +- SC_Plugin_Base.php (プラグイン用基底クラス)
                                      +- tmp/ (プラグインアップデート時のファイル展開用の一時ディレクトリ)

  - html/ -+- plugin/ -+- 【各プラグインhtmlディレクトリ】 -+- メディアファイル(js、css等)
                                                            +- config.php (設定画面)
                                                            +- logo.png (プラグインロゴ)
           +- upload/ -+- temp_plugin/ -+- temp_plugin/ (プラグインファイルの一時ディレクトリ)

▼ プラグインファイル
  - Sample.tar.gz/ -+- Samlpe/ -+- Sample.php (プラグインメインクラス)
                                +- config.php (設定クラス)
                                +- logo.png

　▽プラグインメインクラス [必須]
 　 -各処理を定義するプラグインの本体クラス
 　 □定数定義
 　   PLUGIN_NAME      ：プラグイン名 [必須]
 　   PLUGIN_VERSION   ：プラグインバージョン
 　   COMPLIANT_VERSION：本体対応バージョン
 　   AUTHOR           ：作者
  　  DESCRIPTION      ：説明
  　  PLUGIN_SITE_URL  ：プラグイン用のサイトURL
   　 AUTHOR_SITE_URL  ：作者用のサイトURL
  　  FOOK_POINTS      ：使用するフックポイント

　  □関数
　  各関数はそれぞれの（インストール、アップデート等）処理で実行される。プラグイン側で必要に応じた処理を記述する。
 　   install()
       インストール時に実行される。
       ファイルのコピー、DB更新などをプラグインが必要とする場合は、この処理で行う。
　    uninstall()
       削除時に実行される。
       インストール時に作成したファイル、データ等を削除する。
  　  update()
       アップデート時に実行される。
  　  enable()
       有効へ更新時に実行される。
  　  disable()
       無効へ更新時に実行される。
  　  setTemplateTransformer()
       テンプレート生成時に実行される。
  　  regist()
       SC_Helper_Plugin初期化(ロード)時に実行される。

　▽設定クラス(config.php)
 　 config.phpがhtml/plugin/プラグインディレクトリ以下に存在する場合、config.phpへのリンクをプラグイン一覧に表示します.
 　 プラグインに設定画面が必要な場合はconfig.phpを作成し、インストール時にhtml/plugin/プラグインディレクトリ以下に保存して下さい。

　▽ロゴファイル(logo.png)
 　 一覧にプラグインロゴを表示させる場合は、logo.pngファイルをインストール時にhtml/plugin/プラグインディレクトリ以下に保存して下さい。
 　 サイズは(65x65)とします。
　　＊ロゴファイルが無い場合はnoimageを表示.
}}}
"	新規開発	closed	高	EC-CUBE2.12.0beta	その他	2.12.0 α	修正済			1
