KH-WEBLOG TOP > WEBメモ > EC-CUBE > 送料無料の商品があればカートの中にその旨を表記する:EC-CUBE2.11.1

送料無料の商品があればカートの中にその旨を表記する:EC-CUBE2.11.1

EC-CUBEで以前
個別に商品に送料無料を設ける:EC-CUBE2.11.1
の記事で書いたやり方で個別に送料無料を設定した商品がカートの中に入ってるときに、
「現在カートの中に送料無料の商品が入ってます」
のような表記をカートの中に表示させる方法をメモ。

コーディング・WordPress化作業を代行します

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}-->

などで囲ってあげないと動かないです。

コーディング・WordPress化作業を代行します

TAGS

.htaccess ActionScript All in one seo pack Contact Form 7 CSS CSS3 EC-CUBE Flash HTML HTML5 JavaScript jQuery LightBox PHP RSS SEO WordPress アイキャッチ画像 アクセス解析 カスタムフィールド カテゴリー カラーミーショップ カート コメント ショートコード テンプレートタグ ドロップダウンメニュー パーマリンク フォーム フルスクリーン ブログカード プラグイン ページテンプレート ページナビ ページ分割 マウスイベント リダイレクト リンク リンクカード レンタルサーバー ロールオーバー 携帯サイト 条件分岐 正規表現 関連記事