id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	modified_flg
494	プラグイン機能	nanasess	nanasess	"2.x で使用しているモジュール機能は, EC-CUBE 本体のバージョンに強く依存しやすく, 第三者が簡単にモジュールを開発, 追加できないため, 新たにプラグインの仕組みを開発する.

=== パッチ ===
source:/branches/comu-ver2/patches/GoogleAnalytics_plugin.patch@18230

(r18345 で comu-ver2 にコミット済み)

=== 設置場所 ===
プラグインは, USER_DIR/plugins 以下に保存する.

=== 定数 ===
 * PLUGIN_DIR - ""plugins/""
 * PLUGIN_PATH - USER_PATH . PLUGIN_DIR
 * PLUGIN_URL - USER_URL . PLUGIN_DIR

=== 設定ファイル ===
各プラグインの設定は, PLUGIN_DIR/plugins.xml に設定する.

plugins.xml の例
{{{
#!xml
<?xml version=""1.0"" encoding=""utf-8""?>
<plugins>
  <plugin>
    <name>Google Analytics</name>
    <path>google_analytics</path>
  </plugin>
  <plugin>
    <name>カレンダーブロック</name>
    <path>calendar_block</path>
  </plugin>
</plugins>
}}}
 plugins :: ルート要素です. 複数の plugin を含むことができます.
 plugin :: 各プラグインを定義します.
 name :: プラグインの名前を定義します. 任意の名前をつけることが可能です.
 path :: プラグインのデータファイルが格納されたパスを定義します. PLUGIN_DIR からのパスになります. 相対パスは使用できません. 半角英数字, 「_(アンダーバー)」のみ使用可能です.

管理画面からは, plugins.xml を読み取り, !JavaScript でメニューにプラグイン一覧を表示する.

=== プラグインのファイル構成 ===
plugins.xml の path 要素で設定したディレクトリに, 各プラグインのデータを格納します.

{{{
    - plugins -+- plugins.xml 
               +- .htaccess
               |
               +- foo_plugin_dir -+
                                   |
                                   +- require.php
                                   +- index.php
                                   +- foo_plugin.php
                                   |
                                   +- tpl - example.tpl
                                   |
                                   +- classes - LC_Foo_Plugin.php
                                   |
                                   +- sql -+- install.sql
                                           +- deinstall.sql

}}}

 * require.php - html/require.php で自動的に require されるファイル
 * index.php - 管理画面のプラグイン設定メニューからリンクされるファイル
 * tpl ディレクトリ - プラグインで使用する Smarty テンプレートを格納します.
 * classes ディレクトリ - PHPクラスファイルを格納します.
 * sql - install/deinstall 時に実行する SQL を格納します.

=== ドキュメントの項目 ===
 1. プラグインの名前 (name)
 2. 作成者 (author)
 3. プラグインのサイト (url)
 4. プラグインのバージョン (version)
 5. プラグインの短い説明 (description)
 6. 必要なEC-CUBE最小バージョン (min_eccube_ver)
 7. 注意事項/免責事項表示 (notice)
 8. ライセンス(lisence)
 * see. http://xoops.ec-cube.net/modules/newbb/viewtopic.php?forum=4&post_id=18502&topic_id=4078#forumpost18502

=== 検討事項, TODO など ===
 * プラグイン管理ページを作る(登録/削除)
 * SC_Helper_Plugins_ParserFactory で plugins.xml パーサーの PHP4 と PHP5 の実装を分ける
 * プラグインでも bloc を使えるように, bloc クラスを改修
   * prefix が plugins/ だったら, plugin を見に行くように
   * インストール/アンインストールは, プラグイン管理から行う
   * 内容の編集はブロック編集でも可能だが推奨しない...
 * プラグインディレクトリの PHP ファイルを直接実行されないように .htaccess を置く
{{{
order deny,allow
deny from all
}}}
 * 参考実装として, bloc はすべてプラグインに移植してみたい
 * プラグイン用のユニットテストを格納するディレクトリを作っても良いかも
 * プラグインのURLを入力すると自動でインストールできるようにしたい
   * http://xoops.ec-cube.net/modules/newbb/viewtopic.php?forum=4&post_id=18458&topic_id=4078#forumpost18458
 * PC のみか, モバイルのみか, PC & モバイル対応か設定できるように"	新規開発	closed	中	EC-CUBE2.12.0beta	その他	コミュニティ (eccube-comu)	修正済			1
