EC-CUBE:“5分で実装” スマホ通販サイトで一覧&詳細ページに「カートに入れる」ボタンを設置して画面遷移させない機能を実装(v2.13.2のスマホ版)
前回の『EC-CUBE:“5分で実装” 一覧&詳細ページに「カートに入れる」ボタン設置して画面遷移させない機能を実装(v2.13.2のPC版)』につづき、その機能をスマホ版で実装します。
データベースのパラメーター設定やクラスファイルは共通で使われるので、上記のページ内のクラスファイル修正を適用してください。
それ以外は以下の内容で実装できます。
(クラスファイルなど、共通の修正箇所はこちらを参照してください)
商品一覧ページ(テンプレート)の修正
テンプレートファイルを修正します。
data/Smarty/templates/sphone/products/list.tpl
ページ上部にあるscriptタグ内に2つのメソッドを追記します。
function fnSetClassCategories(form, classcat_id2_selected) { var $form = $(form); var product_id = $form.find('input[name=product_id]').val(); var $sele1 = $form.find('select[name=classcategory_id1]'); var $sele2 = $form.find('select[name=classcategory_id2]'); eccube.setClassCategories($form, product_id, $sele1, $sele2, classcat_id2_selected); } ・・・中略・・・ // カゴに入れる function fnInCart(productForm) { var searchForm = $("#form1"); var cartForm = $(productForm); // 検索条件を引き継ぐ var hiddenValues = ['mode','category_id','maker_id','name','orderby','disp_number','pageno','rnd']; $.each(hiddenValues, function(){ // 商品別のフォームに検索条件の値があれば上書き if (cartForm.has('input[name='+this+']').length != 0) { cartForm.find('input[name='+this+']') .val(searchForm.find('input[name='+this+']').val()); } // なければ追加 else { cartForm.append($('<input type="hidden" />').attr("name", this) .val(searchForm.find('input[name='+this+']').val())); } }); // 商品別のフォームを送信 cartForm.submit(); }
L140行目あたりのformタグを以下に差し替え
<form name="product_form<!--{$id|h}-->" method="post" action="?<!--{if $tpl_Product_Id != ''}-->product_id=<!--{$tpl_Product_Id}--><!--{/if}-->">
L160行目あたりに、元々あった「カートに入れる」ボタンを変更してさらに「レジに進む」ボタンを追加します。
こうすることで商品をある程度カートにためてからレジへ行きたいユーザーが、自分のタイミングですぐに会計画面に移れるようにしてあげます。
<!--<a rel="external" href="javascript:void(document.form1.submit());" class="btn cartbtn_default">カートに入れる</a>--> <button rel="external" id="cart<!--{$id}-->" type="submit" class="cartin" onclick="fnInCart(this.form); return false;">カートに入れる</button> <a rel="external" href="<!--{$smarty.const.CART_URL|h}-->" class="btn cartbtn_default" style="margin-top:15px; color:#FFF;">レジに進む</a>
L190あたりにカートに入れた際の表示方法を切り替えるロジックを追記
<!--{foreachelse}--> <!--{include file="frontparts/search_zero.tpl"}--> <!--{/foreach}--> <!-- ここから --> <!--{if $smarty.const.CARTIN_ALERT == 1}--> <!--{if $CartBuyNow == true}--> <script type="text/javascript"> alert("カートに商品が追加されました。"); </script> <!--{/if}--> <!--{/if}--> <!--{if $smarty.const.CARTIN_ALERT == 2}--> <!--{if $CartBuyNow == true}--> <script type="text/javascript"> if (confirm('カートに商品が追加されました。\n「カートの中を見る」に移動してOKボタン押下\n「ページにとどまる」または「キャンセル」')==true){ location.href = "<!--{$smarty.const.CART_URLPATH}-->"; // example_confirm.html へジャンプ } </script> <!--{/if}--> <!--{/if}--> <!--{if $smarty.const.CARTIN_ALERT == 3}--> <!--{if $CartBuyNow == true}--> <script type="text/javascript"> noty({text: 'カートに商品が追加されました。',layout: 'center', timeout: '2000'}); </script> <!--{/if}--> <!--{/if}--> <!-- ここまで -->
商品詳細ページ(テンプレート)の修正
詳細ページもほぼ同じような内容でテンプレートを修正します。
data/Smarty/templates/sphone/products/detail.tpl
scriptタグの閉じタグのあとに追記します。
<!--{if $smarty.const.CARTIN_ALERT == 1}--> <!--{if $CartBuyNow == true}--> <script type="text/javascript"> alert("買い物かごに商品が追加されました。"); </script> <!--{/if}--> <!--{/if}--> <!--{if $smarty.const.CARTIN_ALERT == 2}--> <!--{if $CartBuyNow == true}--> <script type="text/javascript"> if (confirm('買い物かごに商品が追加されました。\n「カゴの中を見る」に移動→OK\nページにとどまる→キャンセル')==true){ location.href = "<!--{$smarty.const.CART_URLPATH}-->";//example_confirm.html へジャンプ } </script> <!--{/if}--> <!--{/if}--> <!--{if $smarty.const.CARTIN_ALERT == 3}--> <!--{if $CartBuyNow == true}--> <script type="text/javascript"> noty({text: '買い物かごに商品が追加されました。',layout: 'center', timeout: '2000'}); </script> <!--{/if}--> <!--{/if}-->
L155あたりのformタグを修正します。
<form name="form1" id="form1" method="post" action="?<!--{if $tpl_Product_Id != ''}-->product_id=<!--{$tpl_Product_Id}--><!--{/if}-->">
L320あたりにある「カートに入れる」ボタンと「レジに進む」ボタンを実装
<a rel="external" href="javascript:void(document.form1.submit());" class="btn cartbtn_default">カートに入れる</a> <a rel="external" href="<!--{$smarty.const.CART_URL|h}-->" class="btn cartbtn_default" style="margin-top:15px; color:#FFF;">レジに進む</a>
Googleもスマホ対応していないサイトのランキングを下げるモバイルフレンドリーの基準を策定しています。
ユーザビリティだけでなく、SEOという観点からもスマホ対策はしっかりとすべきでしょう。