SOY CMS / SOY Shop

ブログトップ

SOY Shopプラグインの解説 カートで購入の条件を設定する

2014年02月16日

ネットショップを運営するにあたって、

注文の合計金額がある一定以上でなければ受け付けないであるとか、

特定の商品が入っていなければ受け付けないという設定を行わなければならないことがあるかもしれません。


SOY Shopの同梱プラグインで最低購入金額設定プラグイン(ID:common_price_check)というものがあるので、

それをベースに説明していきたいと思います。




話を始める前に下記の拡張ポイントについてをご覧ください。

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


最低購入金額設定プラグインの構造を見ると



上記のようになっています。

soyshop.config.phpとsoyshop.info.phpはすでに挙がっているので省略します。

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


soyshop.config.htmlはsoyshop.config.phpと対になっているファイルで、

HTMLが記述されています。


soyshop.cart.check.phpの拡張ポイントですが、



矢印の箇所をクリックしたときに読み込まれます。


クリックした時、checkErrorPage01という関数が読み込まれ、

ここにカートを通過するためのさまざまな条件を書くことができます。


今回のプラグインのsoyshop.cart.check.phpを読むと


function checkErrorPage01(CartLogic $cart){

	SOY2::import("module.plugins.common_price_check.common.CommonPriceCheck");
	$config = CommonPriceCheck::getConfig();
		
	$configPrice = $config["price"];
	$errorMessage = $config["error"];
		
	$total = $cart->getTotalPrice();
		
	if($total < $configPrice){
		$difference = $configPrice - $total;
		$errorMessage = str_replace("##PRICE##", number_format($configPrice), $errorMessage);
		$errorMessage = str_replace("##DIFFERENCE##", number_format($difference), $errorMessage);
			
		$cart->addErrorMessage("plugin_error", $errorMessage);
		$cart->setAttribute("page", "Cart01");
		$cart->save();
			
		soyshop_redirect_cart();
	}
}

となっています。


この関数ではCartLogicが使えます。

CartLogicは現在のカートに入っている商品の状況であったり、

リダイレクトをした時に表示するカートの情報が入っており、

それらの情報を取り出したりすることができます。

カートのカスタマイズ カートのページ数の調整


今回はカート内に入っている商品の合計金額なので、

$cart->getTotalPrice();で合計金額を取得できますし、


たとえば特定のアイテムが入っていないときはエラーにしたい場合は、

$items = $cart->getItems()でカート内の全商品を取得でき、

foreach($items as $item){
	//何らかの条件を書く
}

というように書けばできます。


Cart01Pageを通過する条件を満たさなかった場合は、


$cart->addErrorMessage("plugin_error", $errorMessage);
$cart->setAttribute("page", "Cart01");
$cart->save();

とaddErrorMessageにkey-valueの形式でエラーメッセージを突っ込んで、

(この時のkeyはplugin_errorとする)

$cart->setAttribute("page", "Cart01");でリダイレクト後に読み込むページを指定して、

(プラグインの拡張ポイントを読み込む前にCart02に設定されている)

$cart->save();で変更内容を保存する。


プラグインの処理が終わったらカートに戻った直後にリダイレクトされます。


この拡張ポイントでは、金額や特定の商品の有無だけでなく、

ログインの有無やポイントの状況でも設定することが可能です。