標準ですと「カートに入れる」ボタンを選択すると「現在のカゴの中」に遷移してしまいます。
それだといちいち商品一覧画面に戻らなくてはならなくて、煩わしいのでカート画面に移動しない処理をします。
カート画面に遷移しない処理 1
/data/class/pages/products/LC_Page_Products_Detail.php160行目付近
SC_Response_Ex::sendRedirect(CART_URLPATH); exit;をコメントアウトします。
//SC_Response_Ex::sendRedirect(CART_URLPATH); //exit;$this->modeが「cart」の場合(※)、CART_URLPATHにリダイレクトする処理をします。
なので、コメントアウトしてしまえばリダイレクトされずにそのままdetail.phpが表示されます。
※カゴに入れるをクリックすると、detail.phpに送信されて$this->modeに「cart」がセットされます。
できた??かな。
「現在のカゴの中」の画面には遷移されずに、商品詳細画面が表示されます。
こんな簡単だったっけな~~?
2.4系の時はもう少し大変だった気がするんだけど。。。
ん~~
ん~~
ん~~
ん~~
む?
むむ?
あ~やっぱりダメだ。
商品追加後、ブラウザの更新ボタンを押してしまうと、商品がカゴの中に入ってしまう。。
どうしましょ。
カート画面に遷移しない処理 2
やっぱりしっかり考えましょう。
- カテゴリーIDを引数にセットしている事を想定します(例:category_id=2)
- 「カゴに入れる」で入力エラーになってしまった場合(規格の選択ミスなど)、カテゴリーIDを引数にセットされた状態で同じ画面に戻す
- カート画面に移動しないで処理できた場合、「商品をカゴに入れました」的なダイアログを表示させたい
/data/class/pages/products/LC_Page_Products_Detail.php
160行目付近を
//SC_Response_Ex::sendRedirect(CART_URLPATH); //exit; //↓↓このように変更します //セッションに商品を買った事を保持します $_SESSION['cart_buy_now'] = TRUE; //リンク元のURLにリダイレクトさせます(カテゴリーIDを引数にセットしているかもなので) SC_Response_Ex::sendRedirect($_SERVER['HTTP_REFERER']); //SC_Response_Ex::sendRedirect(CART_URLPATH); exit;のように変更します。
パンくずリストの下(もしくはログイン判定)あたりに「カートに入れた状態をセッションで一時的に保持」「カテゴリーIDをアサイン」のソースを挿入します。
// パンくずリストを取得 $this->arrTopicPath = $this->lfTopicPath2($product_id, $this->arrRelativeCat); //カートに入れた状態をセッションで一時的に保持。アサイン後初期化 2012/2/29 if ($_SESSION['cart_buy_now'] === true) { $_SESSION['cart_buy_now'] = ''; $this->CartBuyNow = true; } // カテゴリーIDをアサイン $this->tpl_Category_Id = $_GET['category_id'];
/data/Smarty/templates/originalPC/products/detail.tpl
入力エラーになってしまった場合(規格の選択ミスなど)、戻りのURLにカテゴリーIDの引数がついてくるように変更
<form name="form1" id="form1" method="post" action="?"> //↓↓このように変更します <form name="form1" id="form1" method="post" action="?<!--{if $tpl_Category_Id != ''}-->&category_id=<!--{$tpl_Category_Id}--><!--{/if}-->">
<!–▲CONTENTS–>の下あたり下記ソース追加。
もし$CartBuyNow == trueなら行う処理になります。
下記サンプルでは、きちんと全ての処理が動作していれば
商品追加後にアラート画面に「商品を追加しました」と表示されます。
<!--{if $CartBuyNow == true}--> <script type="text/javascript"> alert("商品を追加しました"); </script> <!--{/if}-->※アラートの部分は「alert」でなくてもダイアログなどで表示させると良いかもです。
そこらへんは自由にカスタマイズしてください。
これでOKのはず。
⇒18)カゴの中の商品を表示する
⇒hetemlのサーバでEC-CUBEインストール~公開までの道のり