EC-CUBEカゴに入れるボタンで画面が遷移しない方法 改善編

以前に記事にしましたEC-CUBEの小技:カゴに入れるボタンで精算画面に遷移しない方法を改善案が出ましたので、追加として記事にします。
この記事は最終更新日から1年以上が経過しています。

更新ボタンで購入しない、なおかつアラート

参考記述: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メソッドとか何とか云うのがいいのでは?とまで考えてますが、詳しくは全く分からないわけです。

買い物カゴに入れると、画像がフェードインして表れ、数秒後にフェードアウトで消える。
そういう演出というようなものをやりたいわけですが、皆目見当がつきません。
どなたか教えて頂きたいと考えております。

なんとも甘いとは思えますが、どなたか教えて頂きたいと考えております。
お願いしました。

ブログ運営

株式会社ちょもらんま

https://qomolangma.jp