EC-CUBE:購入者が「のし」の付加を選択できるようにする

上記の書籍をもとに書いています。

本の中では、EC-CUBEのインストールファイルに埋め込む方法まで踏み込んで解説されています。

ここでは、既にインストールされているEC-CUBEに機能を追加するために、その箇所だけを取り出して書きます。
ファイルの内容については、本に書かれていますので、お読みください。

===================================

(1)データベースを拡張する。
「dtb_prpducts」に「のし」の選択可・不可を保持するためのカラム「noshi」を追加する。
フィールド:noshi
種別:smallint
デフォルト値:2
ヌル(NULL):not null

「dtb_order」に購入時に選択された「のし」情報を保持するためのカラム「gift_paper」を追加する。
フィールド:gift_paper
種別:smallint
デフォルト値:NULL
ヌル(NULL):チェックする

「dtb_order_temp」(受注情報一時保存)に購入時に選択された「のし」情報を保持するためのカラム「gift_paper」を追加する。
フィールド:gift_paper
種別:smallint
デフォルト値:NULL
ヌル(NULL):チェックする

マスターテーブルに以下の2つを追加
■データベースに新しいテーブルを作成する
名前:mtb_noshi
フィールド数:3

○フィールド:id 種別:smallint デフォルト値:NULL NULL:チェック インデックス:primary
○フィールド:name 種別:text デフォルト値:NULL NULL:チェック
○フィールド:rank 種別:smallint デフォルト値:0 NULL:not null

■データベースに新しいテーブルを作成する
名前:mtb_gift_paper
フィールド数:3

○フィールド:id 種別:smallint デフォルト値:NULL NULL:チェック インデックス:primary
○フィールド:name 種別:text デフォルト値:NULL NULL:チェック
○フィールド:rank 種別:smallint デフォルト値:0 NULL:not null

一端管理画面を開き、値を登録する。「システム設定>マスターデータ管理」
■mtb_noshi
ID:1 値:可
ID:2 値:不可

■mtb_gift_paper
ID:0 値:希望しない
ID:1 値:無地のし(紅白)
ID:2 値:内祝(蝶むすび)
ID:3 値:内祝(むすび切り)
ID:4 値:内祝(婚礼)
ID:5 値:快気祝
ID:6 値:粗供養
ID:7 値:志(蓮のし)
ID:8 値:無地のし(仏)
ID:9 値:御礼
ID:10 値:御挨拶
ID:11 値:その他

管理者が商品を登録する際、のしの選択「可」「不可」の初期値をパラメータ設定で行う。
「mtb_constants」テーブルに、カラムを挿入する。
id:DEFAULT_PRODUCT_NOSHI
name:2
rank:1231(適宜)
remarks:のしデフォルト選択値(1:可 2:不可)
★管理画面→パラメーター設定で、「この内容で登録する」をクリックすると反映される。

(2)カートセッションの管理
■data/class/SC_CartSession.php
「// カート内にある商品IDを全て取得する」の前に挿入

 /**
 * カート内の商品IDを取得する
 *
 * @param $cartKey カートキー名
 * @return array カート内の商品IDの配列
 */
 function getCartProductID($cartKey) {
 // カートキーの最大要素番号を取得する
 $max = $this->getMax($cartKey);
 // 全てのカートに含まれている商品IDを取得する
 for($i = 0; $i <= $max; $i++) {
 if($this->cartSession[$cartKey][$i]['cart_no'] != "") {
 $arrRet[] = $this->cartSession[$cartKey][$i]['productsClass']['product_id'];
 }
 }
 return $arrRet;
 }

(3)DB関連で共通の処理を追加
■data/class_extends/helper_extends/SC_Helper_DB_Ex.php
class SC_Helper_DB_Ex extends SC_Helper_DB内に挿入

 /* CUORECUSTOM START */
 /**
 * 指定されたIDの商品にのし選択可能商品が
 * 存在するかで「のし選択」項目の表示有無を決定する.
 *
 * @param array $arrProductid 商品IDの配列
 * @return bool true:のし選択可能商品がある false:のし選択可能商品が無し
 */
 function sfJudgeShowGiftPaper($arrProductid) {

// 商品IDが一件もない場合、falseで終了
 if(strlen($arrProductid[0] < 1)) return false;

// カート内にのし選択可能商品が存在する判断する為のSQL用WHERE句を作成する
 $where = "noshi = 1 AND product_id IN(";
 $first = true;
 foreach($arrProductid as $val) {
 if(!$first) {
 $where .= ",";
 } else {
 $first = false;
 }
 $where .= "?";
 $sqlval[] = $val;
 }
 $where .= ")";

// カート内ののし選択可能商品の件数を取得する
 $objQuery =& SC_Query_Ex::getSingletonInstance();
 $cnt = $objQuery->count("dtb_products", $where, $sqlval);

return $cnt > 0;
 }
 /* CUORECUSTOM END */

(4)管理画面→商品管理に「のし」項目を追加
■data/class/page/admin/products/LC_Page_Admin_Products_Product.php
5カ所追加
※本の中では、LC_Page_Admin_Products_Product_EX.phpファイルへのカスタマイズを紹介していますが、カスタマイズは1つのファイルにまとめておきたかったので、LC_Page_Admin_Products_Product.phpに追加しました。(以下同じ)

■data/Smarty/templates/admin/products/product.tpl
■data/Smarty/templates/admin/products/confirm.tpl

(5)管理画面→受注管理に「のしの種類」情報を追加
■data/class/pages/admin/order/LC_Page_Admin_Order_Edit.php
3カ所追加

■data/Smarty/templates/admin/order/edit.tpl

(6)「MYページ/購入履歴詳細」に「のしの種類」情報を追加
■data/class/pages/mypage/LC_Page_Mypage_History.php
1カ所

■data/Smarty/templates/default/mypage/history.tpl
■data/Smarty/templates/mobile/mypage/history.tpl
■data/Smarty/templates/sphone/mypage/history.tpl

(7)「商品購入/お支払い方法・お届け時間等の指定」に「のしの種類」情報を追加
■data/class/pages/shopping/LC_Page_Shopping_Payment.php
■data/Smarty/templates/default/shopping/payment.tpl
■data/Smarty/templates/mobile/shopping/payment.tpl
■data/Smarty/templates/sphone/shopping/payment.tpl

(8)「商品購入/ご入力内容のご確認」に「のしの種類」情報を追加
■data/class/pages/shopping/LC_Page_Shopping_Confirm.php
■data/Smarty/templates/default/shopping/confirm.tpl
■data/Smarty/templates/mobile/shopping/confirm.tpl
■data/Smarty/templates/sphone/shopping/confirm.tpl