先日EC-CUBE2.12のα版リリースを紹介しました。
今回はその目玉機能のプラグインについてソースコードの観点で追いかけてみようと思います。
まずはプラグインのインストールページの挙動からその仕組みに迫ります。
プラグインのインストールはtar.gz形式で圧縮されたファイルをアップロードするところから始まります。
該当ファイルは、
data\class\pages\admin\systemLC_Page_Admin_System_Plugin.php
ポイントとなるソースコードは
switch ($mode) { // インストール case 'install': $file_key = 'plugin_file'; $this->arrErr = $this->checkUploadFile($file_key); if ($this->isError($this->arrErr) === false) { $upload_file = $_FILES[$file_key]; $upload_file_file_name = $upload_file['name']; // インストール処理. $this->arrErr = $this->installPlugin($upload_file_file_name, 'plugin_file'); if ($this->isError($this->arrErr) === false) { // コンパイルファイルのクリア処理 SC_Utils_Ex::clearCompliedTemplate(); $this->tpl_onload = "alert('プラグインをインストールしました。');"; } } break; // 削除
ここまではアップロードされたファイルの確認、続くinstallPluginメソッドの中身に秘密がありそう・・・
function installPlugin($upload_file_file_name, $key) { $arrErr = array(); // ファイルをチェックし一時展開用ディレクトリに展開します. $arrErr = $this->unpackPluginFile($upload_file_file_name, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $key); if ($this->isError($arrErr) === true) { return $arrErr; } // plugin_infoを読み込み. $arrErr = $this->requirePluginFile(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR . 'plugin_info.php', $key); if ($this->isError($arrErr) === true) { $this->rollBack(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); return $arrErr; }
$objReflection = new ReflectionClass('plugin_info'); // プラグインクラスに必須となるパラメータが正常に定義されているかチェックします. $arrErr = $this->checkPluginConstants($objReflection, DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR); // 既にインストールされていないかを判定. if ($this->isInstalledPlugin($plugin_code) === true) { // プラグイン情報をDB登録 if ($this->registerData($objReflection) === false) {
解説:dtb_pluginにプラグイン情報を、dtb_plugin_hookpointにフックポイント情報をインサートします
// プラグイン保存ディレクトリを作成し、一時展開用ディレクトリから移動します. $plugin_dir_path = PLUGIN_UPLOAD_REALDIR . $plugin_code . '/'; $this->makeDir($plugin_dir_path); SC_Utils_Ex::copyDirectory(DOWNLOADS_TEMP_PLUGIN_INSTALL_DIR, $plugin_dir_path);
インストール時にフックポイントを登録していることがわかります。
このフックポイントで実行したい処理をプラグインとして記述できるわけです。
次回以降はサンプルのプラグインを元にプラグインが動作する処理を追ってみたいと思います。
EC‐CUBE「Ver2.11対応」公式ガイドブック 基本編―オープンソースECサイト構築ソフト
Please give us your valuable comment