配送プラグイン

出典: Live Commerceドキュメント

このページでは配送プラグインの開発方法について解説します。

目次

プラグインファイルのアップロードディレクトリ

[公開ディレクトリ]/resources/plugin/DP/


最小ファイル構成


[] >> フォルダを意味する

[plugin_folder]
├[catalog]  -------------- > カタログ側の支払手続きで使われるファイルのフォルダ
    ├[main]
    ├[lang]
        ├[ja] ------------ > カタログ側の支払手続きで使われるファイルの分離された言語データ
    ├ xxxx.php ----------- > カタログ側の支払手続きで表示される送料計算コアファイル
├[js] ------------------- > javascriptを保存するディレクト(デフォルトは空)
├[lib] ------------------- > ライブラリーファイル(デフォルトは空)
├[main]------------------- > 管理側フォルダ
├info.php ---------------- > プラグインに関する情報を記述する
├icon.gif ---------------- > プラグインアイコン(横23px - 縦16px)

コーディグルール

Zendコーディグ規約に準拠させること。

ファイルの文字コード:UTF-8
ファイルの改行コード: LF

プラグインの作成手順

大まかな手順は次の通りです。

  1. info.php にプラグイン情報を記述する。
  2. info.phpに記述した内容に沿って開発する。
  3. 開発したプラグインをアップロードし、プラグインを有効化する。

ここでは、例として sample という名前配送プラグインを開発する手順を説明します。 プラグイン名は半角英数で必ず作成しなければなりません。

1.info.php にプラグイン情報を記述する

sampleフォルダを作成し、info.php ファイルを新規作成し次のソースの記述を行います。

name==><img src="/resources/plugin/DP/sample/icon.gif" /> <a href="http://www.live-commerce">デモ用配送プラグイン</a>
entry_file==>sample/main/sample.php
description==>これはデモ用の配送プラグインです。この部分にこのプラグインの説明文を簡潔に記します。
version==>1.0
author==>ここにあなたの名前(ニックネーム)を記します。
faq==> FAQのURLが公開されている場合は記入します。初期状態は空白 ※
install==> インストール方法のURLが公開されている場合は記入します。初期状態は空白 ※
doc==> ドキュメントのURLが公開されている場合は記入します。初期状態は空白 ※
screen==> スクリーンショットのURLが公開されている場合は記入します。初期状態は空白 ※
community==> ユーザー間のコミニティーのURLが公開されている場合は記入します。初期状態は空白 ※
svn==> Subversionリポジトリを公開している場合はSubversionのURLを記入します。初期状態は空白 ※
bug==> バグ報告先のURLを公開している場合は記入します ※
download==> バージョンを管理しているURLを記入します。初期状態は空白 ※

それぞれのパラメータの意味

name
管理画面のプラグイン管理リストで表示される名前と、アイコンです。プラグイン名の部分をリンクさせることができます。
entry_file
entry_fileのパラメータには必ず プラグイン名/main/プラグイン名.php このような書式になっている必要があります。この書式で指定したパスのPHPファイルに送料を算出するプログラムを記述します。
description
管理画面のプラグイン管理リストで表示される説明文です。何のプラグインなのか分かる説明文を記述します。
version
バージョン管理している場合はバージョンを記述します。空でも可。
author
作者名を記述します。


次に、フォルダを作成して開発前の準備を整えます。以下のような構成になっている必要があります。

[sample]
├[catalog]
    ├[main] ----> 現在は空
    ├[lang]
        ├[ja] --> 現在は空
    ├ sample.php
├[js]  ---------> 現在は空
├[lib] ---------> 現在は空
├[main] ------- > 現在は空
├info.php
├icon.gif

現在は作成したフォルダと、info.php、sample.php、icon.gifの3つのファイルしか存在しません。

2.開発する

配送プラグインの開発部分は主にカタログ側(送料を計算して表示させる部分)と管理側(送料の設定を行う)の2つが必要になります。最初に管理側から開発を行います。

カタログ側(送料の計算部分)の開発

管理側の開発を行うには mainフォルダ内にプラグイン名.phpを作成し、次のコードを記述します。

<?php 
/**
 * Live Commerce, Open Source E-Commerce Solutions
 * http://www.live-commerce.com
 * Copyright (c) 2009 DigitalStudio Inc, http://www.ds-style.com
 *
 * 配送プラグイン sample
 *
 * カスタマイズについての詳細は以下を参照のこと。
 * http://www.live-commerce.com/wiki/index.php/配送プラグイン
 *
 * LICENSE: ライセンス情報
 *
 * @package  Live Commerce
 * @copyright  Copyright (c) 2009, DigitalStudio
 * @license    http://www.live-commerce.com/about/gpl/   GPL License
 * @version    $Id:$
 * @link       http://www.live-commerce.com
 * @since      File available since Release 1.0
 * @deprecated Class deprecated in Release 1.0
 */
 
class sample{
 
    /**
    * 注文時に送信するメール本文
    * @param string Eメール本文のテキストファイル名
    * @return 注文メールに転記される文言
    */
    public function getShippingEmailTxt($shipping_exact_folder){} 
 
    /**
    * 支払い手続き時に表示される配送プラグイン名
    * @param string 配送プラグインフォルダ名
    * @return 配送プラグイン名
    */
    public function getShippingName($shipping_exact_folder){}    
 
    /**
    * 支払い手続き時に表示される配送プラグイン説明文
    * @param string 配送プラグインフォルダ名
    * @return 配送プラグイン説明文
    */
    public function getShippingDesc($shipping_exact_folder){} 
 
    /**
    *  支払い手続き時に表示される配送プラグイン選択可能オプション
    * @param string
    * @param string
    * @return array
    * array($this->option_1($shipping_exact_folder, $PFN),$this->option_2($shipping_exact_folder, $PFN))
    */
    public function getShippingOption($shipping_exact_folder, $PFN){}
 
    /**
    * 支払い手続き時に表示される配送プラグインの選択可能オプション1つ目を返す。
    * 複数のオプションをセットする場合はこの関数を複製し、option_3, option_4..
    * としてget_shipping_optionにセットする。
    * @param bool true =>   false=>
    * @param string
    * @param array
    * array('option_label' => $option_label, 'option_type' => $option_type, 'option_name' => $option_name, 'option_value' => $option_value);
    */
    private function option1($shipping_exact_folder, $PFN, $only_label = false){}
    private function option2($shipping_exact_folder,$PFN,$only_label=false){}     
 
    /**
    * 支払い手続き時に表示される配送プラグイン選択可能オプションに対するjavascript
    * @param string
    * array($this->js_1($PFN),$this->js_2($PFN));
    */
    public function getShippingJs($PFN){}     
 
    /**
    * オプション1/オプション2のjavascript
    * @param string
    * @return array
    */
    private function js1($PFN){}    
    private function js2($PFN){}     
 
    /**
    * 合計送料を設定された通貨形式で出力する
    * @param string
    * @param string 配送プラグインフォルダ名
    * @return string 送料(c::convert_price(金額)) 
    */
    public function getShippingCost($return = false, $shipping_exact_folder = ""){}     
 
    /**
    * オプション1/オプション2送料を出力する
    * @param string 配送プラグインフォルダ名
    * @return int 送料
    */
    private function getShippingCost1($shipping_exact_folder = ""){}     
    private function getShippingCost2($shipping_exact_folder = ""){}     
 
    /**
    * 注文内容確認画面(checkout/confirmation)で表示される配送料金の表示をHTMLレンダリングする
    * @return array 
    * return array( 'label' => $label, 'value' => $cost, 'text' => $text, 'pfn' => $sessionHandler->shipping_plugin_display_CHKINFO['selected']);
    */
    public function getShippingKeyVal(){}     
 
    /**
    * 注文内容確認画面(checkout/confirmation)で表示される配送料金の表示をHTMLレンダリングする
    * @param string ラベル
    * @param string 値
    * @return string HTMLテキスト
    */
    public function getShippingDynamicHtml($label, $text){}     
 
    /**
    * 配送プラグインをo.php,chk_shipping_plugin()へセットする
    * @param string function名
    * @param string 値
    * @param string 配送プラグインフォルダ名
    * @return bool true/false
    */
    public function getShippingChk($request, $PFN, $shipping_exact_folder){}     
 
    private function chkOption_1($request, $PFN){}
    private function chkOption_2($request, $PFN){}     
 
    /**
    * 配送プラグインを支払い手続き画面に出力する最終形
    * @return array
    */
    public function getShippingDisplayInfo(){} 
}

管理側開発

配送プラグインを管理するための管理画面を作成するためには、下記のコードを記述する必要します。


配送プラグインは必ず管理画面を作成し、適用地域、並び順、の2点をデータベースに保存するようにしなければなりません。

<?php
/***************************************************************************
*   管理画面で管理するための関数を設定します。
*   管理機能が必要ない場合は、以下のソースコードの編集は必要ありません。
/***************************************************************************/
 
/**
 * プラグインが有効化されたときに実行したスクリプトを記述します。
 * プラグインを管理すためのデータベースが必要な場合は、クエリーを記
 * 述してテーブル作成を行います。
 * 実行するスクリプトがある場合は return true の前に記述します。
 * @param    none
 * @return    bool
 */
function invokeStart()
{
	return true ;
}
 
/**
 * invokeStartで実行するときに利用するファイルをインクルードします。
 * ファイルはlibフォルダに設置したファイル名を配列で登録します。
 * @param    none
 * @return    array
 */
function invokeStarterLibrary()
{
	//$lib = array('aaaa.php','bbb.php');
	return '';
}
 
/**
 * 管理画面のメニュータブにマウスオーバーした時にプルダウンメニューに
 * 表示される名称
 *
 * @param    none
 * @return    string
 */
function invokeRegisterPluginName()
{
	return 'デモプラグイン';
}
 
/**
 * 管理画面に表示されるメニュータブの位置
 * メニュー番号
 * 0 => ホーム  1=>商品管理  2=>注文管理  3=>顧客管理  4=>ページ管理  
 * 5=>サイト設定  6=>機能管理  7=>ローカライズ  8=>テーマ管理  9=>レポート
 *
 * プルダウンメニューに表示しない場合は空でよい。
 *    
 * @param    none
 * @return    array
 */
function invokeRegisterPlugin()
{
	//$Tab = array('6');
	//return $Tab;
}
 
/**
 * invokeOutputで実行するときに利用するJavascriptファイルをインクルードします。
 * ファイルはjsフォルダに設置したファイル名を配列で登録します。
 * @param    none
 * @return    array
 */
function invokeJs()
{
	$JS = array('');
	//$JS = array('aaaa.js','bbbb.js');
	return $JS;
}
 
/**
 * invokeOutputで実行するときに利用するCSSファイルをインクルードします。
 * ファイルはcssフォルダに設置したファイル名を配列で登録します。
 * @param    none
 * @return    array
 */
function invokeCss()
{
	$CSS = array('');
	//$CSS = array('aaaa.css','bbbb.css');
	return $CSS;
}
 
/**
 * invokeOutputで実行するときに利用するスクリプトファイルをインクルードします。
 * ファイルはlibフォルダに設置したファイル名を配列で登録します。
 *
 * @param    none
 * @return    array
 */
function invokeLibrary()
{
	$lib = array('');
	//$lib = array("constant.php","helper.php","action.php");
	return $lib;
}
 
/**
 * このプラグインを管理するためのAdmin用の設定表示画面のHTMLを登録します。
 * ファイルはlibフォルダに設置したファイル名を配列で登録します。
 *
 * @param    none
 * @return    string
 */    
function invokeOutput()
{
	return '' ;
	//return '<h3>基本設定</h3><div class="box">ここにHTMLタグを記述</div>';
}
 
/**
 * プラグインを無効にするときに利用するスクリプトファイルをインクルードします。
 * ファイルはlibフォルダに設置したファイル名を配列で登録します。
 * @param    none
 * @return    array
 */
function invokeStop_library()
{
	$lib = array('');
	//$lib = array("constant.php","helper.php","action.php");
	return $lib;
}
 
/**
 * プラグインが無効化されたときに実行したスクリプトを記述します。
 * データベースを作成した場合は、削除クエリーなどを記述します。
 * @param    none
 * @return    bool
 */
function invokeStop()
{
	return true ;
}
 
 
/**
 * invokeDevice
 *
 *  このプラグインの有効デバイスを指定する。この関数は省略可
 *  省略した場合は、PC,携帯のそれぞれでtrueとして返す(両デバイスで対応可)
 *  例)携帯のみに対応させる場合は $array = array('pc' => false,'mobile' => true, 'iPhone' => false); とする。
 *
 * @param    none
 * @return    array
 */
function invokeDevice()
{
//このプラグインの利用端末先を判定する
    $array = array('pc' => true,'mobile' => true, 'iPhone' => true);
    return $array;
}

3.プラグインをアップロードする

プラグインを作成したフォルダごと [公開ディレクトリ]/resources/plugin/DP/ へアップロードします。ファイルのパーミッションは特に変更する必要はありません。


アップロードされたプラグインは次のディレクトリ階層になっているはずです。

[公開ディレクトリ(public_htmlなど)]
    ├[resources]
         ├[plugin]
              ├[DP]
                  ├[sample]
                        ├[catalog]
                            ├[main]
                            ├[lang]
                                ├[ja]
                                ├[en](多言語化させる場合、日本語のみであれば不要)
                                ├[zh](多言語化させる場合、日本語のみであれば不要)
                           ├ xxxx.php
                        ├[js]
                        ├[lib]
                        ├[main]
                        ├info.php
                        ├icon.gif


管理画面 > 機能管理 > 配送プラグイン へ行き、アップロードされたプラグインがあることを確認します。

配送プラグイン
配送プラグイン


カタログ画面で実際に配送プラグインが開発した通りに適用されているかどうかを確認します。

配送プラグイン選択画面
配送プラグイン選択画面


注文内容確認画面で実際に配送プラグインが開発した通りに適用されているかどうかを確認します。

注文内容確認画面
注文内容確認画面


注文確認メールで実際に配送プラグインが開発した通りに適用されているかどうかを確認します。

注文確認メール
注文確認メール


invokeDevice(プラグインの有効デバイスを指定する)

このプラグインを利用するデバイス(端末)を指定します。この関数は省略できます。省略した場合は全デバイスで有効となります。

function invokeDevice()
{
    //このプラグインの利用端末先を判定する
    $array = array('pc' => true,'mobile' => true, 'iPhone' => true);
    return $array;
}

mobile=> true で返した場合は、次のユーザーエージェントをヘッダに含む場合有効としています。

  • DoCoMo
  • SoftBank
  • J-PHONE
  • KDDI

iPhone => true で返した場合は、次のユーザーエージェントをヘッダに含む場合有効としています。

  • iPhone

これらのユーザーエージェントが含まれない場合はこのプラグインは実行されません。