共通プラグイン
出典: Live Commerceドキュメント
このページでは共通プラグインについて解説します
開発用のデモプラグイン
開発用のプラグインをダウンロードしてください。 このプラグインをベースにリネームしてプラグインを開発してください。
プラグインファイルのファイル構成
[sample_plugin] ├[css] CSSを保存するディレクトリ(デフォルトは空) ├[js] javascriptを保存するディレクト(デフォルトは空) ├[lib] メディアファイル、classファイルを保存する(デフォルトは空) ├[lang] 言語ファイルフォルダ ├info.php プラグインに関する情報を記述する ├script.php プラグインの関数、カタログのビューを記述する ├admin.php 管理画面のビューを記述する
プラグインの作成手順
どのプラグインを開発するか決定し、プラグインファイルの構成を用意します。
ここでは共通プラグインについての開発手順を説明します。他の配送プラグイン、決済プラグイン、についてはそれぞれのページを参照してください。
1.プラグインを作成するためにの任意のフォルダを作成します。ここではsampleとします。 sampleフォルダにさらに cssフォルダ、jsフォルダ、libフォルダ、langフォルダの4つを作成します。
次に、sampleフォルダに info.php ファイルを新規作成し次のソースの記述を行います。
name==><a href="プラグイン配布元URL">プラグイン名</a> entry_file==>スクリプトフォルダ名(sample)/admin.php descr==>プラグインの説明 version==>プラグインのバージョン名 author==>作成者の名前 faq==> FAQのURLが公開されている場合は記入します。初期状態は空白 ※ install==> インストール方法のURLが公開されている場合は記入します。初期状態は空白 ※ doc==> ドキュメントのURLが公開されている場合は記入します。初期状態は空白 ※ screen==> スクリーンショットのURLが公開されている場合は記入します。初期状態は空白 ※ community==> ユーザー間のコミニティーのURLが公開されている場合は記入します。初期状態は空白 ※ svn==> Subversionリポジトリを公開している場合はSubversionのURLを記入します。初期状態は空白 ※ bug==> バグ報告先のURLを公開している場合は記入します ※ download==> バージョンを管理しているURLを記入します。初期状態は空白 ※
※印の行は必須入力ではありません。入力した場合は、管理画面にあるプラグイン管理のページ一覧にそれぞれのリンクが表示されます。
- プラグイン配布元URL
- 配布元のURLを記入します。 例)http://www.sample.com
- プラグイン名
- プラグイン名を記入します。 例)Sample Plugin
- スクリプトトのファイル名
- このプラグインのプログラムを記述するファイル名を記入します。ファイル名はプラグインフォルダからのパスを記入する必要があります。
例)sample/admin.php
この場合は、admin.phpにプラグインの管理する内容を記述することになります。script.phpはプラグインの関数、および管理画面からコントロールするための管理表示の2つを担当するロジックになります。
- プラグインの説明
- プラグインに関する説明を記入します。HTMLタグが使えます。 例)このプラグインはメンテナンスモードのプラグインです。
- プラグインのバージョン名
- プラグインのバージョン名を記入します。バージョンはプログラマーが独自に命名した名称で構いません。 例)1.0
- 作成者の名前
- 作成した人物の名前を記入します。 例)Live Commerce
2.sample/css フォルダに sample1.css と sample2.css ファイルを作成します。
ファイルの中には空のままにしておきます。この2つのCSSファイルはこのプラグインを利用したときに、後々CSSを記述することができるように
しておくためです。
同様に sample/js フィルダに sample1.js と sample2.js ファイルを作成し、空のまま保存します。
プラグインを書く
3.sampleフォルダの中に script.php ファイルを作成し、実際に利用するスクリプトのソースを記述します。 script.phpファイルはカタログで関数を出力するためには必須のファイルです。 サンプル用に本日の日付をテーマファイルに出力するという、とても単純な機能をプラグインを使って作成してみます。
script.php ファイルの記述例 <?php /** * スクリプトファイル * * @param none * @return string */ function sample_function() { //言語コードを取得する $language = Zend_Registry::get('language'); //プラグインのフォルダ名 $foldar = 'sample'; //言語ファイルをインクルードする include('.'.c::plugin_dir('general').$foldar.'/lang/'.$language.'.php'); return TODAY_TEXT . date('Y/m/d'); } ?>
テーマファイルに次のソースを記述すると、本日の日付が出力されます。
<?php
if(function_exists(sample_function)){
echo sample_function();
}
?>
結果 本日: 2009/XX/XX
プラグインを管理する/管理画面を作る
プラグインを管理する場合は info.phpに記述したentry_fileで指定したファイル(ここではadmin.php) に必要なコードを記述します。
ソース例)
<?php /** * 管理画面で管理するための関数を設定します。 * 管理機能が必要ない場合は、以下のソースコードの編集は必要ありません。 /**/ /** * invokeStart * * プラグインが有効化されたときに実行したスクリプトを記述します。 * プラグインを管理すためのデータベースが必要な場合は、クエリーを記 * 述してテーブル作成を行います。 * 実行するスクリプトがある場合は return true の前に記述します。 * * @param none * @return bool */ function invokeStart() { return true ; } /** * invokeStarterLibrary * * invokeStartで実行するときに利用するファイルをインクルードします。 * ファイルはlibフォルダに設置したファイル名を配列で登録します。 * * @param none * @return array */ function invokeStarterLibrary() { //$lib = array('aaaa.php', 'bbb.php'); return ''; } /** * invokeRegisterPluginName * * 管理画面のメニュータブにマウスオーバーした時にプルダウンメニューに * 表示される名称 * * @param none * @return string */ function invokeRegisterPluginName() { return '開発素材プラグイン'; } /** * invokeRegisterPlugin * * 管理画面に表示されるメニュータブの位置 * メニュー番号 * 0 => ホーム 1=>商品管理 2=>注文管理 3=>顧客管理 4=>ページ管理 * 5=>サイト設定 6=>機能管理 7=>ローカライズ 8=>テーマ管理 9=>レポート * * プルダウンメニューに表示しない場合は空でよい。このスクリプトでは * 管理機能は必要ないので空。 * * @param none * @return array */ function invokeRegisterPlugin() { $tab = array('6'); return $tab; } /** * invokeJs * * invokeOutputで実行するときに利用するJavascriptファイルをインクルードします。 * ファイルはjsフォルダに設置したファイル名を配列で登録します。 * * @param none * @return array */ function invokeJs() { $js = array(); //$js = array('aaaa.js', 'bbbb.js'); return $js; } /** * invokeCss * * invokeOutputで実行するときに利用するCSSファイルをインクルードします。 * ファイルはcssフォルダに設置したファイル名を配列で登録します。 * * @param none * @return array */ function invokeCss() { $css = array(); //$CSS = array('aaaa.css', 'bbbb.css'); return $css; } /** * invokeLibrary * * invokeOutputで実行するときに利用するスクリプトファイルをインクルードします。 * ファイルはlibフォルダに設置したファイル名を配列で登録します。 * * @param none * @return array */ function invokeLibrary() { $lib = array(); //$lib = array('constant.php', 'helper.php', 'action.php'); return $lib; } /** * invokeOutput * * このプラグインを管理するためのAdmin用の設定表示画面のHTMLを登録します。 * ファイルはlibフォルダに設置したファイル名を配列で登録します。 * * @param none * @return string */ function invokeOutput() { return ''; //return '<h3>基本設定</h3><div class="box">ここにHTMLタグを記述</div>'; } /** * invokeStopLibrary * * プラグインを無効にするときに利用するスクリプトファイルをインクルードします。 * ファイルはlibフォルダに設置したファイル名を配列で登録します。 * * @param none * @return array */ function invokeStopLibrary() { $lib = array(); //$lib = array('constant.php', 'helper.php' , 'action.php'); return $lib; } /** * invokeStop * * プラグインが無効化されたときに実行したスクリプトを記述します。 * データベースを作成した場合は、削除クエリーなどを記述します。 * * @param none * @return bool */ function invokeStop() { return true ; }
admin.phpに記述されているそれぞれの関数をさらに分解して解説します。admin.phpでは以下10の関数で構成されています。
invokeStart(プラグインの有効化)
管理画面にあるプラグイン管理ページでプラグインを有効化するリンクをクリックしたときに、実行されるスクリプトを記述します。 何も行わないときはreturn trueのみ記述します。 このプラグイン専用にデータベースを作成する必要がある時は、データベースの作成するクエリー文をreturn true の前に記述します。
function invokeStart()
{
return true ;
}
invokeStarterLibrary(プラグイン有効化時のインクルードスクリプト)
invokeStaterLibrary関数はinvokeStart関数が実行されるときにインクルードされるファイルを配列で登録します。 この関数はプラグインを有効化したときに実行したいスクリプトを記述するため利用されます。
aaaa.phpとbbbb.phpをインクルードしたい場合はは次のように記述します。aaaa.phpとbbbb.phpはlibフォルダ内に設置します。
function invokeStarterLibrary()
{
$lib = array('aaaa.php','bbb.php');
return $lib;
}
invokeRegisterPluginName(タブメニューの名称)
この関数は管理画面でプラグインを管理したい場合に、管理画面タブメニューをマウスオーバーした時に表示されるプルダウンメニューの表示名です。 この関数で記述した名称はinvokeRegisterPlugin関数でタブ表示が指定されていないと表示されません。
プルダウンメニューに”デモプラグイン”と表示したい場合は、次のように記述します。
function invokeRegisterPluginName()
{
return 'デモプラグイン';
}
invokeRegisterPlugin(タブメニューの位置)
invokeRegisterPlugin関数は管理画面にあるメニュータブのどの位置のタブにプルダウンメニューを表示させるかを指定します。 管理メニューのないプラグインの場合記述する必要はありません。
タブメニューの番号は次の通りです。
0 => ホーム 1=>商品管理 2=>注文管理 3=>顧客管理 4=>ページ管理 5=>サイト設定 6=>機能管理 7=>ローカライズ 8=>テーマ管理 9=>レポート
機能管理のタブにプルダウンメニューを追加する場合は配列で次のように記述します。
複数のタブに登録する場合はカンマ(,)で続けてタブの番号を指定します。
function invokeRegisterPlugin()
{
$Tab = array('6');
return $Tab;
}
invokeJs(インクルードするJSスクリプト)
invokeOutputで実行されるときに利用するJavascriptファイルを配列で登録します。登録したファイルはHTMLタグのhead内に<script language... と記述されたコードがインクルードされます。 jsvascriptファイルはjsフォルダに設置します。
sample1.jsとsample2.jsを呼び出す場合
function invokeJs()
{
$JS = array(sample.js','sample.js');
return $JS;
}
HTMLソース表示例
<script type="text/javascript" src="http://your_site/resources/plugin/GP/sample/js/sample1.js"></script> <script type="text/javascript" src="http://your_site/resources/plugin/GP/sample/js/sample2.js"></script>
invokeCss(インクルードするCSSスクリプト)
invokeOutputで実行されるときに利用するcssファイルを配列で登録します。登録したファイルはHTMLタグのhead内に<link href... と記述されたコードがインクルードされます。 cssファイルはcssフォルダに設置します。
aaaa.jsとbbbb.jsを呼び出す場合
function invokeCss()
{
$CSS = array('aaaa.css','bbbb.css');
return $CSS;
}
HTMLソース表示例
<link href="http://your_site/resources/plugin/GP/sample/css/aaaa.css" rel="stylesheet" type="text/css" /> <link href="http://your_site/resources/plugin/GP/sample/css/bbbb.css" rel="stylesheet" type="text/css" />
invokeLibrary(プラグイン利用時のPHPインクルードスクルプト)
invokeOutputで実行されるときに利用するスクリプトファイルを配列で登録します。登録したファイルはinvokeOutput関数の実行時にインクルードされます。 invokeOutput関数で実行時に利用したい独自のPHPのライブラリーや、単独で用意したクラスなどを読み込みさせる場合に利用します。 インクルードさせるファイルはlibフォルダに設置します。
constant.php、helper.php、action.phpの3つのファイルをインクルードします。
function invokeLibrary()
{
$lib = array("constant.php","helper.php","action.php");
return $lib;
}
invokeOutput(プラグイン管理のHTMLビュー)
この関数は追加したプラグインを制御するための管理画面の表示ビューです。 HTMLタグを記述して、必要なデータを登録する処理を行います。データを登録するときはinvokeStart関数で必要なデータベースを作成しておきます。 管理画面を作成しない場合は何も記述する必要はありません。
ここでは、HTML部分のソースが多いため、直接invokeOutputには記述せずに、view という関数を新たに作成してこの関数の中にHTML部分を記述し、 invokeOutputにてviewを出力するような形で記述してみます。
admin.phpの一番下の行に次のソースを記述します。
function view(){
?>
<!--ここにHTMLソースを記述していきます。 -->
<h3>Sample-1</h3>
<form name="sample_plugin_form" action="<?php echo $_SERVER['REQUEST_URI'] ; ?>" method="post">
<div class="box">
<table width="100%" border="0">
<tr>
<td width="200">Name1</td>
<td><input type="text" name="data1" id="data1" /><span class="form_dsc">Name1の説明</span>
</td>
</tr>
<tr>
<td>name2</td>
<td><input type="text" name="data2" id="data2" /><span class="form_dsc">Name2の説明</span></td>
</tr>
</table>
</div>
<h3>Sample-2</h3>
<div class="box">
<table width="100%" border="0">
<tr>
<td width="200">Name3</td>
<td><label><input type="radio" name="data3" id="radio" value="1" />
select1</label>
<label><input type="radio" name="data3" id="radio" value="2" />
select2</label>
<span class="form_dsc">Name3の説明</span>
</td>
</tr>
<tr>
<td>name4</td>
<td><input type="text" name="data4" id="data4" /><span class="form_dsc">Name4の説明</span></td>
</tr>
</table>
</div>
<div class="action">
<input type="submit" name="" value="Submit" />
</div>
</form>
<?php
}
?>
これは次のように表示されます。
次に、invokeOutput関数には次のように記述します。viewがコールされ、HTML部分が表示されます。
function invokeOutput()
{
view();
}
プラグイン内のスクリプトのアクション結果を出力する
記述したスクリプトに対して結果メッセージを画面上に出力するときは、次のソースコードをh1タグの前に記述します。
結果メッセージ表示例 <div class="msg_success">更新しました。</div> <div class="msg_error">更新に失敗しました。</div> <div class="msg_worning">予期せぬエラーが発生しました。</div>
div タグのクラス要素
- msg_success
- 成功時に利用するCSSクラス名
- msg_error
- スクリプトでエラーがある場合に利用するCSSクラス名
- msg_worning
- エラー以外に発生したエラーの場合に利用するCSSクラス名
結果メッセージの表示例
プログラムの記述例
function view(){
//ここにはPHPスクリプトを記述するか、invokeLibraryでインクルードしたファイルににスクリプト記述します。
//exmple script
if(isset($_POST['data1'])){
$name1 = $_POST['data1'];
if(!empty($name1)){
echo '<div class="msg_success">更新しました。</div>';
}else{
echo '<div class="msg_error">更新に失敗しました。</div>';
}
}
....
invokeStopLibrary(プラグイン無効化時のインクルードスクリプト)
この関数はプラグインを無効にするときに利用したいスクリプトファイルをインクルードするための関数です。 インクルードするファイルはlibフォルダに設置したファイル名を配列で登録します。ない場合、配列は空のままです。
constant.php、helper.php、action.phpの3つのファイルをインクルードします。
function invokeStopLibrary()
{
$lib = array('constant.php','helper.php','action.php');
return $lib;
}
invokeStop(プラグインの無効化)
プラグインを無効化したときに実行したいスクリプトを記述します。 データベースを作成した場合は、削除クエリーなどをreturn true の前に記述します。
function invokeStop()
{
return true ;
}
プラグインへのアクセスパス(新しいURLを追加したい場合)
作成したプラグインに対して、独自のビュー(ページ)を作成しURLでアクセスしたい場合は、次の手順で行うことができます。 これは、テンプレートに用意されているファイルとは別に、独自にページを追加したい場合に役立ちます。
この例では、独自にお問い合わせフォームを作成したい場合の例で説明します。
ファイルの作成
新しくURLを作成して、そのURLにアクセスした時に任意のスクリプトを実行させたい場合、プイラグインフォルダ内に任意のファイルを作成し、次のパラメータによりダイレクトリに呼び出しすることができます。
URLのリクエスト
プラグインディレクトリsampleにあるscript2.phpファイルにアクセスした場合、次のURLでコールすることができます。 http://your_site/plugin/view/_action/sample/_t/プラグインタイプ/_f/script2
プラグインタイプには次のパラメータを指定できます。
- payment
- このパラメータはpaymentプラグインのディレクトリを参照します。
- shipping
- このパラメータはshippingプラグインのディレクトリを参照します。
- _fを省略した場合、script.phpをデフォルトでリクエストします。
- _tを省略した場合、/resources/GP/以下に存在するプラグインを参照します。
例えば、/resources/plugin/PP/abc123/hello.php というファイルが存在し、hello.phpへアクセスする場合、 次のURLでアクセスすることができます。
http://your_site/plugin/view/_action/abc123/_t/payment/_f/hello
/plugin/view/_action/プラグインのフォルダ名/_t/プラグイン種類/_f/スクリプトファイル
- プラグインのフォルダ名
- ここにはプラグインのフォルダ名を記述します。
- プラグインのファイル名
- ここには拡張子(.php)を除くファイル名を記述します。
出力部分(HTML)の記述
リクエスト部分であるscript2.phpでは次のソースを記述します。
<?php /** * Live Commerce, Open Source E-Commerce Solutions * http://www.live-commerce.com * Copyright (c) 2009 DigitalStudio Inc, http://www.ds-style.com * * Live Commerceプラグインファイル * プラグインサンプルのページ出力 * * LICENSE * @package Live Commerce * @copyright Copyright (c) 2009, DigitalStudio * @license http://www.live-commerce.com/about/gpl/ GPL License */ /** * サンプルページを出力する * このページには次のURLでアクセス可能です。 * http://_______________________/plugin/view/_action/sample2/ */ function sample2Head() { //プラグインのフォルダ名 $foldar = 'sample2'; //CSSをヘッダ内<head></head>に読み込みさせる場合にcssフォルダに設置したファイル名を記述 Zend_Registry::set('css', array('sample1.css', 'sample2.css')); //Javascriptをヘッダ内<head></head>に読み込みさせる場合にjsフォルダに設置したファイル名を記述 Zend_Registry::set('js', array('sample1.js', 'sample2.js')); //cssディレクトリ Zend_Registry::set('css_path', c::plugin_dir('general') . $foldar . '/css/'); //jsディレクトリ Zend_Registry::set('js_path', c::plugin_dir('general'). $foldar . '/js/'); } /** * 関数名は フォルダ名Catalog * ボディーを出力します */ function sample2Catalog() { return TEXT_SAMPLE_HTML ; } /** * 関数名は フォルダ名Header * 既存テーマのヘッダーを出力 */ function sample2Header() { return true; } /** * 関数名は フォルダ名Footer * 既存テーマのフッターを出力 */ function sample2Footer() { return true; } /** * 関数名は フォルダ名Breadclumb * ナビゲーションを自動生成 */ function sample2Breadclumb() { $breadclumbArray = array(array('link' => '', 'text' => TEXT_SAMPLE_PAGE)) ; return $breadclumbArray; }
それぞれの関数について解説します。
フォルダ名Head(<head>内にCSS、JSファイルをインクルードさせる)
<head>内にCSS、JSファイルをインクルードさせる場合にはCSSファイル、JSファイルを記述します。
ソース例)
function sample2Head() { //プラグインのフォルダ名 $foldar = 'sample2'; //CSSをヘッダ内<head></head>に読み込みさせる場合にcssフォルダに設置したファイル名を記述 Zend_Registry::set('css', array('sample1.css', 'sample2.css')); //Javascriptをヘッダ内<head></head>に読み込みさせる場合にjsフォルダに設置したファイル名を記述 Zend_Registry::set('js', array('sample1.js', 'sample2.js')); //cssディレクトリ Zend_Registry::set('css_path', c::plugin_dir('general') . $foldar . '/css/'); //jsディレクトリ Zend_Registry::set('js_path', c::plugin_dir('general'). $foldar . '/js/'); }
これを記述すると、次のソースがHTMLのhead内に出力されます。
<link href="/resources/plugin/GP/sample/css/sample1.css" media="screen" rel="stylesheet" type="text/css" /> <link href="/resources/plugin/GP/sample/css/sample2.css" media="screen" rel="stylesheet" type="text/css" /> <script type="text/javascript" src="/resources/plugin/GP/sample/js/sample1.js"></script> <script type="text/javascript" src="/resources/plugin/GP/sample/js/sample2.js"></script>
フォルダ名Catalog(URLアクセスでビューを出力する)
これは既存のテーマファイル以外に、独自にURLを設けてこのプラグインのページにアクセスしたい場合です。動的な新しいページを作成するには必ずこの関数を利用してください。静的な新しいページはページ作成から行えます。
例えは、独自にランキングページを作成したり、独自にFlashのページを作成したり、独自にWordPressと連携してRSSフィードを取得したページを作成したりする場合には、必要になります。
/** * 関数名は フォルダ名Catalog * ボディーを出力します */ function sample2Catalog() { echo TEXT_SAMPLE_HTML ; }
下記はlang/ja.php にHTMLを記述した例です。英語にも対応させるにはen.phpを作成し、同様の記述を英文で行う必要があります。
<?php define(TEXT_SAMPLE_HTML,' <div id="contents"> <div class="fullFrame"> <div class="categoryFrame"> <h1>このページはプラグインによって追加されたデモページです</h1> </div> <p>これは開発素材用のサンプルプラグインによって表示されているページです。このプラグインを元に開発を行ってください。</p> <p>システムにページの追加を行う場合、静的なページは管理画面 > ページ管理 から追加ができます。動的なページはプラグインを使って、簡単にページを追加することができます。<br /> 追加したページは言語毎に追加することもできます。 </p> </div> </div> </div>'); ?>
フォルダ名Header(現在のテーマのhedaerを出力する)
現在利用しているテーマのヘッダー(include/header.php)を追記したい場合には次のソースを記述します。 sampleHeader がtrueの時、現在選択されているテーマのheader.phpがsampleCatalogのコードよりも先に出力されます。
/** * 関数名は フォルダ名Header * 既存テーマのヘッダーを出力 */ function sample2Header() { return true; }
フォルダ名Footer(現在のテーマのfooterを出力する)
現在利用しているテーマのフッターを追記したい場合には次のソースを記述します。 sampleFooter がtrueの時、現在選択されているテーマのfooter.phpがsampleCatalogのコードの後に出力されます。
/** * 関数名は フォルダ名Footer * 既存テーマのフッターを出力 */ function sample2Footer() { return true; }
フォルダ名Breadclumb(ナビゲーションを出力)
ナビゲーションを出力します。ナビゲーションは配列で指定します。
/** * 関数名は フォルダ名Breadclumb * ナビゲーションを自動生成 */ function sample2Breadclumb() { $breadclumbArray = array(array('link' => '', 'text' => TEXT_SAMPLE_PAGE)) ; return $breadclumbArray; } //ナビゲーションを階層化する場合は、次のように記述 $breadclumbArray = array(array('link' => '', 'text' => TEXT_SAMPLE_PAGE), array('link' => '', 'text' => TEXT_SAMPLE_PAGE2));
この結果は次のように画面に表示されます。linkを指定した場合は、リンクタグが付与されます。
ホーム > TEXT_SAMPLE_PAGE > TEXT_SAMPLE_PAGE2

