EC-CUBEカゴに入れるボタンで画面が遷移しない方法 改善編
更新ボタンで購入しない、なおかつアラート
参考記述:EC-CUBE:カゴに入れた直後にカート画面に飛ばないようにする | ITOBEN STYLE Blog
以前の方法ですと、カゴに入れるボタンで購入後、画面は遷移せずに済みましたが、その状態で更新ボタンを押すと、自動的に商品が追加されるという悪しき状態でした。
修正方法もわからず、放置しておりましたが、この参考記述によって、ほとんどが解消されることになります。
ちなみに、こちらのブログは、結構な数のカスタマイズ情報が載っています。
会社としてやっているのに、こんな手の内を晒していいものなのか、よくわかりませんが、とてもありがたいものです。
では、ファイルを修正していきます。
商品詳細ページから
data/class/pages/products/LC_Page_Products_Detail.php
160行目あたりを以下に変更
SC_Response_Ex::sendRedirect(CART_URLPATH); exit; ↓(以下に変更) //カゴに入れた直後にカート画面に飛ばない。携帯とスマートフォンには適用しない。 if(SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE || SC_Display_Ex::detectDevice() == DEVICE_TYPE_SMARTPHONE) { SC_Response_Ex::sendRedirect(CART_URLPATH); exit; } else { //セッションに商品を買った事を保持する $_SESSION['cart_buy_now'] = TRUE; //リンク元のURLにリダイレクトさせる SC_Response_Ex::sendRedirect($_SERVER['HTTP_REFERER']); exit; }
同ファイルfunction action()内の一番最後に以下を追加
//カートに入れた状態をセッションで一時的に保持。アサイン後初期化。携帯とスマートフォンには適用しない。 if(SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE || SC_Display_Ex::detectDevice() == DEVICE_TYPE_SMARTPHONE) { } else { if ($_SESSION['cart_buy_now'] === true) { $_SESSION['cart_buy_now'] = ''; $this->CartBuyNow = true; } // カテゴリーIDをアサイン $this->tpl_Category_Id = $_GET['category_id']; }
/data/Smarty/templates/default/products/detail.tpl
以下の記述を書き換え
<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>の後に
以下を追加
<!--{if $CartBuyNow == true}--> <script type="text/javascript"> alert("カゴに商品が追加されました。"); </script> <!--{/if}-->
これで商品詳細ページは完了です。
続いて商品一覧ページ。
data/class/pages/products/LC_Page_Products_List.php
197行目あたりを以下に変更
SC_Response_Ex::sendRedirect(CART_URLPATH); exit; ↓(変更) //カゴに入れた直後にカート画面に飛ばない。携帯とスマートフォンには適用しない。 if(SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE || SC_Display_Ex::detectDevice() == DEVICE_TYPE_SMARTPHONE) { SC_Response_Ex::sendRedirect(CART_URLPATH); exit; } else { //セッションに商品を買った事を保持する $_SESSION['cart_buy_now'] = TRUE; //リンク元のURLにリダイレクトさせる SC_Response_Ex::sendRedirect($_SERVER['HTTP_REFERER']); exit; }
同ファイルfunction action()内の一番最後
以下を追加
//カートに入れた状態をセッションで一時的に保持。アサイン後初期化。携帯とスマートフォンには適用しない。 if(SC_Display_Ex::detectDevice() == DEVICE_TYPE_MOBILE || SC_Display_Ex::detectDevice() == DEVICE_TYPE_SMARTPHONE) { } else { if ($_SESSION['cart_buy_now'] === true) { $_SESSION['cart_buy_now'] = ''; $this->CartBuyNow = true; } }
/data/Smarty/templates/default/products/list.tpl
一番下 <▲CONTENTS>の後に
<!--{if $CartBuyNow == true}--> <script type="text/javascript"> alert("カゴに商品が追加されました。"); </script> <!--{/if}-->
以上で商品一覧ページの方も完了です。
残る不満による、今後の改善点。
一応、一般的なものが出来上がったわけですが、不満はあります。
まず、カゴに入れた時にアラートが出る様になったわけですが、このアラートというのは、自動的に消えないわけです。
そうなると、いちいち『OK』ボタンを押す必要があり、追々、これも嫌がられる原因となってくるでしょう。
そして、このアラートもテキストではなく、そのお店の特色の画像で表示できないか、という願望もあるわけで。
以前も言いましたが、結局は目指せアスクルなわけです。
色々調べると、popupメソッドとか何とか云うのがいいのでは?とまで考えてますが、詳しくは全く分からないわけです。
買い物カゴに入れると、画像がフェードインして表れ、数秒後にフェードアウトで消える。
そういう演出というようなものをやりたいわけですが、皆目見当がつきません。
どなたか教えて頂きたいと考えております。
なんとも甘いとは思えますが、どなたか教えて頂きたいと考えております。
お願いしました。