2014年9月24日水曜日

EC-CUBE クローズ化サイトプラグインを作成(前編)

新しいノートを使うとき最初のページは綺麗に使おうと頑張りますよね。
ということで、始めのうちは頑張って更新します!!(謎

気を取り直して、前回の宣言通り、機能するプラグインを作りたいと思います。

何のプラグインを作るかといいますと、クローズサイト化プラグインを作りたいと思います。
(タイトルに出てますが)


クローズドサイト化は、会員のみしかアクセスできないようにするということです。
会員限定サイトや、企業間取引サイト(BtoBサイト)を作る際に必要な機能になります。

こったものを作ろうと思うと、大変ですが会員でないとアクセス出来ないようにするだけであれば、それほど難しくないと思いますので、今回も3ステップで作りたいと思います。

1.プラグイン作成の準備
2.常に動作する処理の実装
3.クーロズ化に必要なパターンへの対応

では、早速
1.プラグイン作成の準備

前回作成(リンク)したプラグインのベースをプラグイン用に整備したいと思います。

まず、プラグインのベースをコピーして、ファイル名を変更します。

変更するファイルはもちろん「PluginBase.php」になります。
今回作成するプラグインはクローズサイト化のプラグインですので、名前はそれっぽくMyCloseSiteにしてみます。

[ファイル名の変更]
PluginBase.php」→「MyCloseSite.php

ファイル名の変更が終わったら、TopicPathを変更した際と同様に、「MyCloseSite.php」をエディタで開き「PluginBase」を「MyCloseSite」へ置換します。

また、「plugin_info.php」をエディタで開き、クローズサイト化プラグイン用に書き換えます。

こんな感じになるかと思います。

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

せっかくなので、plugin_info について少し解説したいと思います。
(そんなに詳しくはないですが。。)

$PLUGIN_CODE [必須]
 ・・・ コメントの通りですがプラグインを識別する為のキーになります。一意になる値を指定すればOKです。

$PLUGIN_NAME [必須]
 ・・・ これまたコメントの通りですが、EC-CUBE上に表示される名称になります。作成したプラグインの名前になるかと思います。

$CLASS_NAME [必須]
 ・・・ プラグインのクラス名を設定します。今回ですと、「MyCloseSite.php」のクラス名を指定してやります。ここで指定したクラスが、プラグインのメインとして動作します。

$PLUGIN_VERSION [必須]
 ・・・ プラグインのバージョンです。対応しているEC-CUBEのバージョンを指定します。記述方法のチェックはないですが、2.13.0~2.13.2など分かりやすくした方が良いかと思います。

$AUTHOR [必須]
 ・・・ プラグインの作成者を設定します。好きなように指定して大丈夫です。

$DESCRIPTION [必須]
 ・・・ プラグインの説明を設定します。好きなように指定して大丈夫です。

$PLUGIN_SITE_URL [必須]
 ・・・ URLを設定できます。EC-CUBEの管理画面にてプラグインを確認した際、リンクとして設定されます。

$LICENSE [必須]
 ・・・ ライセンスを指定します。

※必須となっている項目を設定していない状態で、EC-CUBEへインストールを行ってもエラーは発生しませんが、正しく動作しなくなりますので、ご注意ください。

ソースの準備はこれで完了ですが、このままでは動作の確認を行いながら作成することが難しいので、EC-CUBEへインストールしたいと思います。

現在あるファイルを「tar.gz」で圧縮しプラグインにします。
(※推奨はtar.gz ですが、tarでもインストール可能です)

[圧縮対象]
MyCloseSite.php
logo.png
plugin_info.php
plugin_update.php

圧縮後のファイル名は、分かりやすく「MyCloseSite.tar.gz」にします。圧縮できたら、EC-CUBEの管理画面へ作成したプラグインをインストールします。
圧縮できたら、EC-CUBEの管理画面へ作成したプラグインをインストールします。

エラーなくインストールができれば、ステップ1は完了です。

おそらくこんな感じで登録されるかと思います。

pc0007

エラーが出た場合は、エラーログを確認したり、plugin_info.php、MyCloseSite.phpを確認したりして対処します。


では、続いてステップ2
2.常に動作する処理の実装
へ進みます。

具体的に何をするかと言いますと、ソースコードを「MyCloseSite.php」へ追加します。

インストールしたファイルへ追加する必要がありますので、プラグインのインストールを行ったEC-CUBEの下記のパスのファイルを開きます。

[変更対象ファイル]
data/downloads/plugin/MyCloseSite/MyCloseSite.php

ファイルを開いたら、以下のコードを追記します。

// グローバルフックポイント
function preProcess(LC_Page $objPage) {
// 常に動作させたい処理を記述
}

この処理は、グローバル(スーパー)フックポイントとなっており、サイトへアクセスがある度に毎回呼ばれる処理となっております。

EC-CUBEのプラグインの中で、自動実行する機能が付いているけど、cronの設定が必要ないものは、この処理をトリガーにして動作しています。
ですので、自動実行と言いつつ全くアクセスがない場合は、動作しなかったりします。

アクセスがある度に呼ばれるので、便利なフックポイントとなっておりますが、重い処理を記述してしまうとサイトの動作が一気に重くなりますので、注意が必要です。

とりあえず、どうなるか試しに何か表示してみましょう。

// グローバルフックポイント
function preProcess(LC_Page $objPage) {
// 常に動作させたい処理を記述
print_r("preProcess");
}

こんな感じで記述して、トップページを表示させてみます。

pc0008

左上に、"preProcess"の文字が表示されました。

どの画面へ遷移しても表示されていると思います。

管理画面へ遷移しても同じです。

pc0009

すばらしいですね。


プラグイン機能を利用せず、同じことをやろうとすると、LC_Page.phpに書くのかな?処理の内容次第では他に良いとこがあるようなと、悩みそうですが、自信を持ってかける分楽ですね
(って私が小心者だからかな?)

ということで、ぼちぼちな分量になってきたので、前編は終了です。

(後編に続く)

0 件のコメント:

コメントを投稿