2014年9月23日火曜日

EC-CUBEのプラグイン(ベース)の作成

初回の投稿記念ということで、続けてもう1つ

さっそくEC-CUBEのプラグインを自分で作ってみよう、あわよくば売ってみようなノリで進めていきます!!

(まぁ、実際のところ企業で有料プラグインを作成して販売した場合、人気の有料プラグインに入るぐらいのダウンロード数がないと旨味がないと思いますが、個人なら少しのダウンロードでも良いお小遣いになる気がします)

pc0002
(今日現在の人気プラグイン)

 

前置きはこのくらいにしておいて、本題です。

まず、何から始めるかといいますと、プラグインをダウンロードするところから始めましょう。
完全によくあるパターンのやつなのですが、最近上場された、株式会社ロックオン様が作成された「パンクズプラグイン」をダウンロードし、それを変更します。

[ダウンロード]
プラグインのページはこちらになります。

初期に公開された+ベースにするという用途でダウンロードされているので、すごいダウンロード数になってますね。

ダウンロードするには、会員になる必要がありますが、無料ですので登録しちゃってください。


ダウンロード後、どういう手順で進めるかと言いますと

1.パンクズプラグインを解凍

2.名前を変えて、不要なファイルを削除

3.不要な記述をカットして、プラグインのベース完成

という(無理やり)3ステップだけです!!

 

では、さっそく

1.パンクズプラグインを解凍

にとりかかりたいと思います。

まず、ダウンロードしたプラグインを見てみましょう。
tar.gzの形式で圧縮されているかと思います。

プラグインといっても、ルールに則って作成したphpのコードを圧縮しただけのものになりますので、適当な解凍ツールで解凍してください。
解凍すると、結構な数のファイルが入っているかと思いますが、解凍できればステップ1は完了です。

 

続いてステップ2の
2.名前を変えて、不要なファイルを削除

に進みたいと思います。

ベースを作るために不要な部分をカットしようと思いますが、どの部分が不要かといいますと、大半です。
(まぁベース用なので、そりゃそうですね)

ディレクトリを名前の昇順に設定して、不要なのは上から

pc0004
bloc > ディレクトリまるごと
media > ディレクトリまるごと
templates > ディレクトリまるごと
config.php
LC_Page_FrontParts_Bloc_TopicPath.php
LC_Page_Plugin_TopicPath_Config.php

になります。
このファイルフォルダ削除します。

削除したら、残ったファイルは次の4つになるかと思います。

pc0005
logo.png
plugin_info.php
plugin_update.php
TopicPath.php

続いて、ファイル名を変更と言いつつ変更していないので、変更します。

変更対象のファイルは「TopicPath.php」になります。

こちらは、好きな名前で良いですが、ベースなので「PluginBase.php」に変えようと思います。

pc0006
(こんな感じです)

これで、ステップ2も終了です。

 

いよいよ最後のステップ
3.不要な記述をカットして、プラグインのベース完成
に進みます。

最後のステップというだけあって、今までの作業に比べると多少手間がかかります。

名前を変更したファイル「PluginBase.php」をエディタで開き、
ベースにするため、表示されたソースコードの不要な部分をカットしていきます。

まずカットする前に、「TopicPath」の記述を全て、先ほど変更したファイル名「PluginBase」に置換します。

次にソースコード内の以下の場所を削除していきます。

function install($arrPlugin) {     
// [削除] PluginBase::insertBloc($arrPlugin);
// [削除] PluginBase::insertFreeField();

// 必要なファイルをコピーします.
// [削除] copy(PLUGIN_UPLOAD_REALDIR . "PluginBase/templates/plg_PluginBase_PluginBase.tpl", TEMPLATE_REALDIR . "frontparts/bloc/plg_PluginBase_PluginBase.tpl");
// [削除] copy(PLUGIN_UPLOAD_REALDIR . "PluginBase/bloc/plg_PluginBase_PluginBase.php", HTML_REALDIR . "frontparts/bloc/plg_PluginBase_PluginBase.php");
// [削除] copy(PLUGIN_UPLOAD_REALDIR . "PluginBase/config.php", PLUGIN_HTML_REALDIR . "PluginBase/config.php");
copy(PLUGIN_UPLOAD_REALDIR . "PluginBase/logo.png", PLUGIN_HTML_REALDIR . "PluginBase/logo.png");
// [削除] mkdir(PLUGIN_HTML_REALDIR . "PluginBase/media");
// [削除] SC_Utils_Ex::sfCopyDir(PLUGIN_UPLOAD_REALDIR . "PluginBase/media/", PLUGIN_HTML_REALDIR . "PluginBase/media/");
}

ロゴ画像をコピーしている部分以外は全て削除になります。
※ステップ2で書き忘れたのですが、このlog.png がプラグインのロゴ画像になります。

ちなみに、この「install」部分がEC-CUBEの管理画面よりプラグインをインストールした際に動作する部分になります。

次は、uninstall部分に移ります。

(説明するまでもないかもしれませんが、この部分がEC-CUBEの管理画面よりプラグインをアンインストールした際に動作する部分になります)

function uninstall($arrPlugin) {
// [削除] $objQuery = SC_Query_Ex::getSingletonInstance();
// [削除] $arrBlocId = $objQuery->getCol('bloc_id', "dtb_bloc", "device_type_id = ? AND filename = ?", array(DEVICE_TYPE_PC , "plg_PluginBase_PluginBase"));
// [削除] $bloc_id = (int) $arrBlocId[0];
// [削除] // ブロックを削除する.
// [削除] $where = "bloc_id = ?";
// [削除] $objQuery->delete("dtb_bloc", $where, array($bloc_id));
// [削除] $objQuery->delete("dtb_blocposition", $where, array($bloc_id));

// [削除] // メディアディレクトリ削除.
// [削除] SC_Helper_FileManager_Ex::deleteFile(PLUGIN_HTML_REALDIR . "PluginBase/media");
// [削除] SC_Helper_FileManager_Ex::deleteFile(TEMPLATE_REALDIR . "frontparts/bloc/plg_PluginBase_PluginBase.tpl");
// [削除] SC_Helper_FileManager_Ex::deleteFile(HTML_REALDIR . "frontparts/bloc/plg_PluginBase_PluginBase.php");
// [削除] SC_Helper_FileManager_Ex::deleteFile(PLUGIN_HTML_REALDIR . "PluginBase");
}

処理部分は、全て削除となります。

じゃんじゃん進みます。

function register(SC_Helper_Plugin $objHelperPlugin) {
// [削除] // ヘッダへの追加
// [削除] $template_dir = PLUGIN_UPLOAD_REALDIR . 'PluginBase/templates/';
// [削除] $objHelperPlugin->setHeadNavi($template_dir . 'plg_PluginBase_header.tpl');
}

同じく、処理部分は全て削除

この2つについては、呼ぶだし部分を削除したので、functionまるごと削除します。

// [削除] // プラグイン独自の設定データを追加
// [削除] function insertFreeField() {
// [削除] $objQuery = SC_Query_Ex::getSingletonInstance();
// [削除] $sqlval = array();
// [削除] $sqlval['free_field1'] = "1";
// [削除] $sqlval['free_field2'] = "1";
// [削除] $sqlval['update_date'] = 'CURRENT_TIMESTAMP';
// [削除] $where = "plugin_code = ?";
// [削除] // UPDATEの実行
// [削除] $objQuery->update('dtb_plugin', $sqlval, $where, array('PluginBase'));
// [削除] }

// [削除] function insertBloc($arrPlugin) {
// [削除] $objQuery = SC_Query_Ex::getSingletonInstance();
// [削除] // dtb_blocにブロックを追加する.
// [削除] $sqlval_bloc = array();
// [削除] $sqlval_bloc['device_type_id'] = DEVICE_TYPE_PC;
// [削除] $sqlval_bloc['bloc_id'] = $objQuery->max('bloc_id', "dtb_bloc", "device_type_id = " . DEVICE_TYPE_PC) + 1;
// [削除] $sqlval_bloc['bloc_name'] = $arrPlugin['plugin_name'];
// [削除] $sqlval_bloc['tpl_path'] = "plg_PluginBase_PluginBase.tpl";
// [削除] $sqlval_bloc['filename'] = "plg_PluginBase_PluginBase";
// [削除] $sqlval_bloc['create_date'] = "CURRENT_TIMESTAMP";
// [削除] $sqlval_bloc['update_date'] = "CURRENT_TIMESTAMP";
// [削除] $sqlval_bloc['php_path'] = "frontparts/bloc/plg_PluginBase_PluginBase.php";
// [削除] $sqlval_bloc['deletable_flg'] = 0;
// [削除] $sqlval_bloc['plugin_id'] = $arrPlugin['plugin_id'];
// [削除] $objQuery->insert("dtb_bloc", $sqlval_bloc);
// [削除] }

これで、大物は終了しました。

あと一息、「plugin_info.php」を変更したいと思います。

こちらは、プラグインの設定ファイルの様なものですので、削除というか作成するプラグインに合わせて設定する様な形になります。

では、先ほどと同じように「plugin_info.php」をエディタで開きます。

まぁ、書いてある通りですし、ベース様なのであんまり変更する意味はないのですが、次の用に変更します。

class plugin_info{
/** プラグインコード(必須):プラグインを識別する為キーで、他のプラグインと重複しない一意な値である必要がありま. */
static $PLUGIN_CODE = "PluginBase";
/** プラグイン名(必須):EC-CUBE上で表示されるプラグイン名. */
static $PLUGIN_NAME = "プラグイン作成のベース";
/** クラス名(必須):プラグインのクラス(拡張子は含まない) */
static $CLASS_NAME = "PluginBase";
/** プラグインバージョン(必須):プラグインのバージョン. */
static $PLUGIN_VERSION = "0.1";
/** 対応バージョン(必須):対応するEC-CUBEバージョン. */
static $COMPLIANT_VERSION = "2.12.0";
/** 作者(必須):プラグイン作者. */
static $AUTHOR = "[作成者の名前を記入]";
/** 説明(必須):プラグインの説明. */
static $DESCRIPTION = "プラグインのベースに利用";
/** プラグインURL:プラグイン毎に設定出来るURL(説明ページなど) */
static $PLUGIN_SITE_URL = "";
/** ライセンス */
static $LICENSE = "LGPL";
}

これでステップ3も終了です!!


ということで、プラグインのベースができました。
一応、こちらに完成版をアップしております。

いま、変更したファイルをtar.gzで圧縮してEC-CUBEの管理画面よりインストールすれば、ロゴだけセットされたプラグインがインストールされます。

今回は、ほとんどプラグインのソースコードについて説明しませんでしたが、実際にプラグインを作成していく際に説明したいと思います。


EC関連のブログを書きながら、【EC-CUBE管理サポートアプリ】ACCubeにも興味をもってもらえたら良いなとか思っていましたが、どう考えてもブログの内容が、ACCubeのターゲット向けでない気がしております。。
(よろしければ周りのEC-CUBEショップオーナー様にACCubeを勧めてくださいということで。。m(_ _)m)


次回からは、このプラグインのベースを使って実際に機能するプラグインを作成したいと思います。

0 件のコメント:

コメントを投稿