カートに商品を入れる
2014.03.30
商品詳細ページでカートに入れるボタンを押すと、
カートページに商品が表示されます。
商品ごとに設置されているカートに入れるボタンを押すとカートに入りますが、
今回はボタンを押してからカートに入るまでの流れを見ていきます。
始めにカートに入れるボタンのHTMLを見ると、
同梱テンプレートではform型を利用しており、コードは下記のようになります。
<form action="/shop/cart/operation?a=add&count=1&item=1" method="post" > <input type="hidden" name="soy2_token" value="トークン" /> <!-- 途中省略 --> <input type="submit" value="カートに入れる"></p> </form>
もう一つのリンク型では、
<a href="/shop/cart/operation?a=add&count=1&item=1">カートに入れる</a>
となります。
どちらも共通しているのが、カートページのURLの後にoperationとGETで?a=add&count=1&item=1の値を指定しています。
このURLを元にページコントローラの処理を見ていきましょう。
カートページを開く場合、
/soyshop/webapp/src/base/SOYShopSiteController.class.phpでカートページを表示する際にexcuteCartApplicationが実行されますが、処理を詳しく見ると
function executeCartApplication($args){ $webPage = SOY2HTMLFactory::createInstance("SOYShop_CartPage", array( "arguments" => array(SOYSHOP_CURRENT_CART_ID) )); //カートに商品を入れる処理はここから if(count($args) > 0 && $args[0] == "operation"){ $webPage->doOperation(); exit; }else{ //カートの表示に関する処理 } }
URLでcartの後にoperationがある場合は$webPage->doOperation()が呼びだれます。
doOperationは/soyshop/webapp/src/base/site/pages/SOYShop_CartPage.class.phpの13行目付近にあり、
function doOperation(){ $this->checkSSL(); SOY2::import("base.cart.cart", ".php"); header("Location: ". $this->getCartURL()); exit; }
/soyshop/webapp/src/base/cart/cart.phpを読み込んだ後にカートページにリダイレクトします。
(checkSSLは管理画面で設定したカートページをhttpsで表示するかの処理になります。)
cart.phpを見ると
if(isset($_REQUEST["a"])) { SOYShopPlugin::load("soyshop.item.option"); $cart = CartLogic::getCart(); //商品オプションの拡張ポイントの処理は省略 //カートに入っている商品に変更がある場合は、選択されているモジュールをクリアする $cart->clearModules(); switch($_REQUEST["a"]) { case "add": //カートに商品を入れる関係の処理 break; case "remove": //カートに入れた商品をカートから削除する処理 break; case "update": //カートに入れた商品の個数を変更する処理 break; case "shoooot";//カートを一つの商品で満たす //開発用の処理 break; } //消費税の計算とモジュールの登録 if(SOYSHOP_CONSUMPTION_TAX_MODE){ //外税(プラグインによる処理) $cart->setConsumptionTax(); }elseif(SOYSHOP_CONSUMPTION_TAX_INCLUSIVE_PRICING_MODE){ //内税(標準実装) $cart->setConsumptionTaxInclusivePricing(); }else{ //何もしない } $cart->save(); } //use cart id $cartId = soyshop_get_cart_id(); include(SOY2::RootDir() . "cart/" . $cartId . "/cart.php");
詳しい処理は端折りますが、カートに入れる際にURLの末尾に追加したaの値はカートでのアクションの指示で、
a=addはカートに商品を入れる処理になります。
countはカートに入れる時の個数の指定で
itemはカートに入れる商品のIDになります。
商品オプションに関しては下記の記事をご覧ください。
aに入れる他の処理は
カート内の商品の操作の際に使います。
カートに商品を入れる処理が終わったら、$cart->save()でセッションに保存して、
/soyshop/webapp/src/cart/bryon/cart.phpを開いて、
(bryonは設定したカートID)
$cart = CartLogic::getCart(); $cart->setAttribute("page", null); $cart->save();
カートページの開くページの設定を初期化して、/shop/cartにリダイレクトします。
カートページの指定の詳細は下記の記事をご覧ください。
これでカートに商品を入れる処理の一通りの流れは終了です。