送料無料の商品があればカートの中にその旨を表記する:EC-CUBE2.11.1
EC-CUBEで以前
個別に商品に送料無料を設ける:EC-CUBE2.11.1
の記事で書いたやり方で個別に送料無料を設定した商品がカートの中に入ってるときに、
「現在カートの中に送料無料の商品が入ってます」
のような表記をカートの中に表示させる方法をメモ。
1.SC_CartSession.phpの編集
まず、data/class/SC_CartSession.php
の中に(function calculateの定義の下ぐらいがわかりやすいかも・・)
//送料無料商品の有無 function getSouryouFree($productTypeId) { $objDb = new SC_Helper_DB_Ex(); $sFree = 0; if (OPTION_PRODUCT_DELIV_FEE == 1) { $cartItems = $this->getCartList($productTypeId); foreach ($cartItems as $item) { //送料無料商品があるとき if($item['productsClass']['deliv_fee'] == 1){ $sFree = 1; } } } return $sFree; }
と追加し、アップロードします。
※SC_CartSession.phpは簡単に言うとカートの情報を管理しているファイルです。(たぶん・・・)
2.「カートの中」phpファイルの編集
次に、カートの中のphpファイルを編集していきます。
EC-CUBEのデフォルトでは
カートの中にも
- ・カートの中(サイドバー等に表示するブロック)
- ・カートの中(ページ)
の2種類があると思いますが、今回は両方に
「現在カートの中に送料無料の商品が入ってます」
と表示させます。
まず、カートの中(サイドバー等に表示するブロック)
に表示させるには、
data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Cart.php
の
function lfGetCartData(&$objCart) { $arrCartKeys = $objCart->getKeys(); foreach ($arrCartKeys as $cart_key) { // カート情報を取得 $arrCartList = $objCart->getCartList($cart_key); // カート内の商品ID一覧を取得 $arrAllProductID = $objCart->getAllProductID($cart_key); // 商品が1つ以上入っている場合には商品名称を取得 if (count($arrCartList) > 0){ foreach($arrCartList['productsClass'] as $key => $val){ $arrCartList[$key]['product_name'] = $val['name']; } } // 購入金額合計 $products_total += $objCart->getAllProductsTotal($cart_key); // 合計数量 $total_quantity += $objCart->getTotalQuantity($cart_key); // 送料無料チェック if (!$this->isMultiple && !$this->hasDownload) { $is_deliv_free = $objCart->isDelivFree($cart_key); } }
↑の部分を
function lfGetCartData(&$objCart) { $arrCartKeys = $objCart->getKeys(); foreach ($arrCartKeys as $cart_key) { // カート情報を取得 $arrCartList = $objCart->getCartList($cart_key); // カート内の商品ID一覧を取得 $arrAllProductID = $objCart->getAllProductID($cart_key); // 商品が1つ以上入っている場合には商品名称を取得 if (count($arrCartList) > 0){ foreach($arrCartList['productsClass'] as $key => $val){ $arrCartList[$key]['product_name'] = $val['name']; } } // 購入金額合計 $products_total += $objCart->getAllProductsTotal($cart_key); // 合計数量 $total_quantity += $objCart->getTotalQuantity($cart_key); // 送料無料チェック if (!$this->isMultiple && !$this->hasDownload) { $is_deliv_free = $objCart->isDelivFree($cart_key); } // 送料無料商品の有無--追加 $Muryou += $objCart->getSouryouFree($cart_key); }
のように
$Muryou += $objCart->getSouryouFree($cart_key);
を追加し、
さらにその下の
$arrCartList[0]['ProductsTotal'] = $products_total; $arrCartList[0]['TotalQuantity'] = $total_quantity;
と書かれてる部分を
$arrCartList[0]['ProductsTotal'] = $products_total; $arrCartList[0]['TotalQuantity'] = $total_quantity; //追加 $arrCartList[0]['sFree'] = $Muryou;
のように
$arrCartList[0][‘sFree’] = $Muryou;
と追加しアップロードでOK
次に、カートの中(ページ)に表示させるための編集をします。
data/class/pages/cart/LC_Page_Cart.php
の
foreach ($this->cartKeys as $key) { // カート集計処理 $this->tpl_message = $objCartSess->checkProducts($key); $this->tpl_total_inctax[$key] = $objCartSess->getAllProductsTotal($key); $this->tpl_total_tax[$key] = $objCartSess->getAllProductsTax($key); // ポイント合計 $this->tpl_total_point[$key] = $objCartSess->getAllProductsPoint($key); $this->arrData[$key] = $objCartSess->calculate($key, $objCustomer); // 送料無料チェック $this->arrData[$key]['is_deliv_free'] = $objCartSess->isDelivFree($key); // 送料無料までの金額を計算 $this->tpl_deliv_free[$key] = $this->arrInfo['free_rule'] - $this->tpl_total_inctax[$key]; }
の部分を
foreach ($this->cartKeys as $key) { // カート集計処理 $this->tpl_message = $objCartSess->checkProducts($key); $this->tpl_total_inctax[$key] = $objCartSess->getAllProductsTotal($key); $this->tpl_total_tax[$key] = $objCartSess->getAllProductsTax($key); // ポイント合計 $this->tpl_total_point[$key] = $objCartSess->getAllProductsPoint($key); $this->arrData[$key] = $objCartSess->calculate($key, $objCustomer); // 送料無料チェック $this->arrData[$key]['is_deliv_free'] = $objCartSess->isDelivFree($key); // 送料無料までの金額を計算 $this->tpl_deliv_free[$key] = $this->arrInfo['free_rule'] - $this->tpl_total_inctax[$key]; // 送料無料商品の有無--追加 $this->arrData[$key]['muryou'] = $objCartSess->getSouryouFree($key); }
のように
$this->arrData[$key][‘muryou’] = $objCartSess->getSouryouFree($key);
を追加しアップロードします。
3.テンプレートへの記述
あとは、表記させたい部分に
カートの中(サイドバー等に表示するブロック)の場合は
「管理画面」→「ブロック設定」→「かごの中」ブロック内に
<!--{if $arrCartList.0.sFree > 0}--> 送料無料商品があるときのメッセージ <!--{else}--> 送料無料商品がないときのメッセージ (ないときは表示させないならこの部分は削除OK) <!--{/if}-->
と記述。
カートの中(ページ)の場合は
「管理画面」→「ページ詳細」→「かごの中」内に
<!--{if $arrData[$key].muryou > 0}--> 送料無料商品があるときのメッセージ <!--{else}--> 送料無料商品がないときのメッセージ (ないときは表示させないならこの部分は削除OK) <!--{/if}-->
と記述すればOK。
※ちなみにスマートフォンとモバイルサイトの「かごの中(ページ)」に
表示させる場合も上記の記述でできます。
※表示させる場所によっては
例えば「かごの中(ブロック)」の場合
<!--{if $arrCartList.0.TotalQuantity > 0 and $arrCartList.0.free_rule > 0 and !$isMultiple and !$hasDownload}--> ここに上記ソース挿入 <!--{/if}-->
などで囲ってあげないと動かないです。