ブログトップ
カートに商品を入れる直前でログインチェックを行う
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を利用します。
処理を見ると
(/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; } }
このようにポイントによる制限も可能です。