送料無料の商品があればカートの中にその旨を表記する: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}-->
などで囲ってあげないと動かないです。

