17)「カゴに入れる」ボタンを押してもカート画面に移動しないようにする – hetemlのサーバでEC-CUBE(2.11.4)を使ってみる

3月 4th, 2012 カテゴリー EC-CUBE2.11

標準ですと「カートに入れる」ボタンを選択すると「現在のカゴの中」に遷移してしまいます。
それだといちいち商品一覧画面に戻らなくてはならなくて、煩わしいのでカート画面に移動しない処理をします。


カート画面に遷移しない処理 1

/data/class/pages/products/LC_Page_Products_Detail.php
160行目付近
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インストール~公開までの道のり

Sponsored Links

コメントする

Eメールアドレスは公開されません。