SOY CMS / SOY Shop

ブログトップ

カートに商品を入れる直前でログインチェックを行う

2014年04月16日

今までの記事でカートやマイページの仕様をみてきました。

カートに商品を入れる

マイページの各ページのログインチェックと表示

マイページの注文詳細ページで注文情報を取得する


他に会員でないとカートに商品を入れられないという仕様もいくつかみてきました。

カスタムスクリプトでページ閲覧に制限をつける

SOY Shopで作成したページにログインフォームを設置する


これらを踏まえた上で、カートのログイン制限を見ていきたいと思います。




商品詳細ページをカスタムスクリプトでログインチェックを行ったり、

ログインフォームのパーツモジュールでカートに入れるボタンの表示でログインチェックを行ったりすることで、

会員でなければ商品を購入できないという制限ができるようになっていますが、


カートに入れるボタンの仕様を見ると、

カートに入れるためのパスを直接打ち込むと商品を購入できてしまいます。

(/shop/cart/operation?a=add&count=1&item=1)


というわけで、

カートに入れるところでも念の為にログインチェックを入れたいと思います。




今回の説明は1.13.7に同梱される会員制カートプラグインをベースに進めます。

(プラグインID:common_membership_cart)


このプラグインは1.13.7から追加される拡張ポイント、soyshop.cart.phpのdoOperationを利用します。

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


処理を見ると

(/soyshop/webapp/src/module/plugins/common_membership_cart/soyshop.cart.php)


class CommonMembershipCart extends SOYShopCartBase{

	function doOperation(){
		
		$mypage = MyPageLogic::getMyPage();
						
		//ログインチェック
		if(!$mypage->getIsLoggedin()){
			header("Location:" . $_SERVER["HTTP_REFERER"]);
			exit;
		}
	}
}

ログインしていない場合は前に表示していたページに戻るという単純なものです。


それでは、

doOperation関数がどのタイミングで呼ばれているかというと、


(/soyshop/webapp/src/base/site/pages/SOYShop_CartPage.class.php)


function doOperation(){
	//カートの処理の直前に何らかの処理を行いたい場合
	SOYShopPlugin::load("soyshop.cart");
	SOYShopPlugin::invoke("soyshop.cart", array(
		"mode" => "doOperation"
	));
		
	$this->checkSSL();

	SOY2::import("base.cart.cart", ".php");
	header("Location: ". $this->getCartURL());
	exit;
}

カートに商品を入れる時に呼び出されるdoOperation関数のカートに入れる処理の直前に呼び出されています。




今回は単純なログインチェックですが、


function doOperation(){
		
	$mypage = MyPageLogic::getMyPage();
	
	$user = $mypage->getUser();
	$point = $user->getPoint();
					
	//100ptが貯まっていない顧客の場合はカートを表示させない
	if($point < 100){
		header("Location:" . $_SERVER["HTTP_REFERER"]);
		exit;
	}
}

このようにポイントによる制限も可能です。