一期一会 株式会社webtech 執行役員 川邊英之の公式ブログ

株式会社webtechのべーやんこと川邊英之が日々の想いを綴る公式ブログ

EC-CUBEの商品個別送料無料設定カスタマイズ

EC-CUBE

いやぁ〜、かなり苦労しました。とあるECサイト制作で、特定の商品を購入または、その特定の商品を含むお買い物時の送料を無料にするという設定を行いました。もちろん、EC-CUBEにはそんな機能搭載されていません。(痕跡らしきものはあるのですが・・・。)そこで、実際に手動でカスタマイズする事になった訳です。

ご存知の方はご存知でしょう。EC-CUBE。今や大手のECサイトもこのシステムを導入しています。しかし、基本的な機能に多々問題がある為、いろいろとカスタマイズされて公開されている事がほとんどなんですよね。でもって、その中は複雑怪奇。非常にファイルが多く、どこにどの機能を格納しているファイルか理解するのにさえ、膨大な時間がかかります。

正直言って私も全てを把握できている訳ではありません。基本的な表面の編集ぐらいでしょうかね。通常それ以外は使う事がないので、必要もないと思いますが、何せそのファイル数は非常に多いというのは確かです。

で、そんな事をダラダラと書いても仕方がありません。早速本題です。この商品個別送料無料設定ができるように行うには、いくつかのファイルをFFFTPやCodaなどを使って編集しないければなりません。その手順を私個人のメモ代わりとしても、書き留めておこうと思います。私と同じようにカスタマイズされる方もご参考頂ければと思います。

1.「…/data/Smarty/templates/default/admin/products/confirm.tpl」を編集します。以下の「ポイント付与率」の上部に赤色のコードを入力して下さい。だいたい92行目ぐらいの位置にあると思います。

<table>

</tr>
<!–{/if}–>

<tr>
<td bgcolor=”#f2f1ec” width=”160″ class=”fs12n”>送料区分</td>
<td bgcolor=”#ffffff” width=”557″ class=”fs12n”>
<!–{if $arrForm.deliv_fee == 1}–>
送料無料(同梱対応)
<!–{else}–>
通常商品
<!–{/if}–>
</td>
</tr>

<tr>
<th>ポイント付与率</th>

2.続いて「…/data/Smarty/templates/default/admin/products/product.tpl」を編集します。今回も削除と追記です。場所は、約161行目あたりです。

<input type=”checkbox” name=”stock_unlimited” value=”1″ <!–{if $arrForm.stock_unlimited == “1”}–>checked<!–{/if}–> onclick=”fnCheckStockLimit(‘<!–{$smarty.const.DISABLED_RGB}–>’);”/>無制限</td>
</td>
</tr>
<!–{/if}–>


<!–{* 送料の個別指定は次期開発で追加予定
<tr>
<th>商品送料

<input type=”text” name=”deliv_fee” value=”<!–{$arrForm.deliv_fee|escape}–>” size=”6″ class=”box6″ maxlength=”<!–{$smarty.const.PRICE_LEN}–>” style=”<!–{if $arrErr.deliv_fee != “”}–>background-color: <!–{$smarty.const.ERR_COLOR}–><!–{/if}–>”/>円
<span class=”attention”> (半角数字で入力)</span>
</td>
</tr>
*}–>


<tr class=”fs12n”>
<td bgcolor=”#f2f1ec” width=”160″>送料区分<span class=”red”> *</span></td>
<td bgcolor=”#ffffff” width=”557″><input type=”radio” name=”deliv_fee” value=”1″ <!–{if $arrForm.deliv_fee == “1”}–>checked<!–{/if}–>/>送料無料(同梱対応)
<input type=”radio” name=”deliv_fee” value=”0″ <!–{if $arrForm.deliv_fee == “0”}–>checked<!–{/if}–> />通常商品</td>
</tr>

<tr class=”fs12n”>
<td bgcolor=”#f2f1ec” width=”160″>ポイント付与率<span class=”red”> *</span></td>
<td bgcolor=”#ffffff” width=”557″>

3.続いて「…/data/class/SC_CartSession.php」を編集します。今回は削除のみです。場所は、約350行目あたりです。

}

// 全商品の合計送料
function getAllProductsDelivFee() {
// ポイント合計
$total = 0;
$max = $this->getMax();
or($i = 0; $i < = $max; $i++) { $deliv_fee = $_SESSION[$this->key][$i][‘deliv_fee’];
$quantity = $_SESSION[$this->key][$i][‘quantity’];
$total+= ($deliv_fee * $quantity);
}
return $total;
}

// カートの中の売り切れチェック
function chkSoldOut($arrCartList, $is_mobile = false){

4.続いて「…/data/class/helper/SC_Helper_DB.php」を編集します。今回も削除&追記です。更に数カ所ありますので一カ所ずつご紹介致します。間違うとEC-CUBEが動かなくなってしまう事もあるので。間違わないように気をつけて下さい。まずは、約1498行目付近です。

// 商品ごとの送料が有効の場合
if (OPTION_PRODUCT_DELIV_FEE == 1) {

$arrData[‘deliv_fee’]+= $objCartSess->getAllProductsDelivFee();


$this->lfAddAllProductsDelivFee($arrData, $objPage, $objCartSess);
}

}

// 配送業者の送料が有効の場合

if (OPTION_DELIV_FEE == 1) {
// 送料の合計を計算する
$arrData[‘deliv_fee’] += $this->sfGetDelivFee($arrData);


// 商品の種類が1種類で尚且つ送料無料設定が1以上の場合は送料0
if($objPage->tpl_total_deliv_fee >= 1){
$arrData[‘deliv_fee’] = 0;
}else{
$arrData[‘deliv_fee’] += $this->sfGetDelivFee($arrData);
}

}

5.引き続いて「…/data/class/helper/SC_Helper_DB.php」を編集します。今回は最後尾に追記します。

}

/**
* 全商品の合計送料を加算する
*/
function lfCalcAllProductsDelivFee(&$arrData, &$objCartSess) {
$objQuery = new SC_Query();
$deliv_fee_total = 0;
$max = $objCartSess->getMax();
for ($i = 0; $i < = $max; $i++) { // 商品送料 $deliv_fee = $objQuery->getOne(‘SELECT deliv_fee FROM dtb_products WHERE product_id = ?’, array($_SESSION[$objCartSess->key][$i][‘id’][0]));
// 数量
$quantity = $_SESSION[$objCartSess->key][$i][‘quantity’];
// 累積
$deliv_fee_total += $deliv_fee * $quantity;
}
return $deliv_fee_total;
}

/**
* 都道府県、支払い方法から配送料金を加算する.
*
*@param array $arrData
*/
function lfAddDelivFee(&$arrData) {
$arrData[‘deliv_fee’] += $this->sfGetDelivFee($arrRet);
}

}

6.またまた引き続いて「…/data/class/helper/SC_Helper_DB.php」を編集します。追記&削除です。これで一応最後の編集ですね。

* 都道府県、支払い方法から配送料金を取得する.
*
* @param integer $pref 都道府県ID
* @param integer $payment_id 支払い方法ID

* @param array $arrData 各種情報
* @return string 指定の都道府県, 支払い方法の配送料金
*/

一応これで商品登録の際に通常ではなかった「送料区分」が出ているはずです。そこで「送料無料(同梱対応)」と「通常商品」が選択できるラジオボタンも登場しているはずです。そこで、商品別に該当する内容に設定してやればOKなはず!私は一応これで問題なく動作しています。

こうやって書いてみたら簡単に見えるかもしれませんが、結構苦労しました。ネットでググったり、アドバイスを頂いたりと・・・。でも、その分達成感は違いますねぇ〜。これでまた1つ賢くなりましたぁ〜♪忘れないようにこうやってブログに書いていれば一安心です。って言ってもこの記事を書くのに、2時間掛かってしまっていますが(汗)。

今からまた仕事に戻りたいと思います。では、またこういうネタがあればエントリしたいと思います。

NEWS

政治経済芸能など様々な時事ネタを取り上げたカテゴリ

記事一覧

WEB

webtechが制作したホームページや制作時に苦労した内容を記述するカテゴリ

記事一覧

FASHION

実際に自分が購入したアイテムや注目しているアイテムを紹介するカテゴリ

記事一覧

NOTES

プライベートな内容を雑記的に記述したカテゴリ

記事一覧