EC-CUBE2.12αのプラグイン解説その1

火曜日 , 13, 3月 2012 Leave a comment

 先日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;
        }
plugin_info.phpがプラグインの設定を書き込むファイル。
これは次回解説しようと思います。
展開した後に、ReflectionClassはPHPのデフォクラスで、引数で渡したクラスの情報を取得

 

$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サイト構築ソフト
EC‐CUBE「Ver2.11対応」公式ガイドブック 基本編―オープンソースECサイト構築ソフト

 

 

EC-CUBE 実践カスタマイズ
EC-CUBE 実践カスタマイズ


Please give us your valuable comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です