SOY CMS / SOY Shop

ブログトップ

SOY Shopプラグインの解説 配送モジュール

2014年02月26日

ネットショップを運営するにあたって、配送をどうするか?というのは重要な話になってきます。

電子書籍のダウンロード販売だから配送はないよという方であっても

注文情報には配送不要でダウンロードによる引き渡しという情報を登録しなければなりません。


SOY Shopでは配送の選択や登録はモジュール(プラグイン)で行っており、

今回は配送周りの拡張ポイントについての説明をします。

SOY Shopプラグインの解説 拡張ポイントについて




今回は同梱されていない佐川急便用の配送モジュール(ID:delivery_sagawa_free)をベースに説明します。

delivery_sagawa_free_1.2のダウンロード


構造は下記のようになっており、



soyshop.delivery.phpという拡張ポイントで配送関係の処理を行っています。


このプラグインのsoyshop.order.export.phpでは、e飛伝用のCSVファイルを出力しています。

e飛伝II│送り状発行システム(e飛伝シリーズ)│佐川急便株式会社<SGホールディングスグループ>

SOY Shopプラグインの解説 納品書やCSVを一括で出力する


他の拡張ポイントについては省略します。

SOY Shopプラグインの解説 詳細画面の作成

SOY Shopプラグインの解説 メールの文面に追加




/soyshop/webapp/src/logic/plugin/extensions/soyshop.delivery.phpを見ると、


class SOYShopDelivery implements SOY2PluginAction{

	private $cart;

	function onSelect(CartLogic $cart){

	}

	function getName(){
		return "";
	}

	function getDescription(){
		return "";
	}

	function getPrice(){
		return "";
	}

	function getCart() {
		return $this->cart;
	}
	function setCart($cart) {
		$this->cart = $cart;
	}
}

getter、setter関数を除くと、使える関数が4個用意されています。


詳細を見ていくと


soyshop.delivery.phpを持つプラグインをインストールするとCart03Pageで

カートのカスタマイズ カートの仕様



配送方法の選択に項目が追加され、

項目に表示する文字列もしくは数字の対応は矢印で示した通りです。

各関数でreturnで値を返すと表示されます。


選択するのラジオボタンの箇所には

<input name="delivery_module" value="delivery_sagawa_free" type="radio">

が出力される点が重要です。


nameにはモジュール(プラグイン)のタイプ、

valueにはモジュールID(プラグインID)が入ります。




onSelect関数はCart03Pageで次へ(type="submit")が押された時に読み込まれる関数で、

$_POST["delivery_module"]の値を受け取って、配送の選択として登録します。


onSelect関数はカートの方で、


$moduleId = (isset($_POST["payment_module"])) ? $_POST["payment_module"] : null;
$cart->setAttribute("payment_module", $moduleId);

$paymentModule = $moduleDAO->getByPluginId($moduleId);
SOYShopPlugin::load("soyshop.payment", $paymentModule);

//実行
SOYShopPlugin::invoke("soyshop.payment", array(
	"mode" => "select",
	"cart" => $cart
));

とSOYShopPlugin::loadで選択されたモジュールのみを読み込むようにしています。


配送モジュールの

/soyshop/webapp/src/module/plugins/delivery_sagawa_free/soyshop.delivery.phpを見ると


function onSelect(CartLogic $cart){

	//一部省略

	$module = new SOYShop_ItemModule();
	$module->setId("delivery_sagawa_free");
	$module->setName("送料");
	$module->setType("delivery_module");
	$module->setPrice($this->getPrice());
	$cart->addModule($module);
}

と選択したモジュールをCartLogicのaddModule関数で登録しています。


モジュールの登録以外の配送時間等の情報を登録しておきたい場合は、

$cart->setOrderAttribute("delivery_sagawa_free.date","配達希望日", $value);

とCartLogicのsetOrderAttributeで第一引数にkey、第二引数にデータのラベル、第三引数に保持しておきたい値を入れます。


カートに戻ってから$cart->save();を行うので、

onSelect内で$cart->save();とカートのセッションに値を入れた後に保存しなくても良いです。