前回はテンプレートファイルのカスタマイズをしたのでその続きから始めます。
Contents
Classファイルの修正
ディレクトリ内の『data/class/』に各種クラスファイルが保存されています。修正や追加をする場合は『data/class_extends/』を利用するのがいいようです。説明は『data/class/』の方で説明します。修正するときはバックアップを取ったほうが良いと思います!
カスタマイズファイル:SC_CartSession.php
①230行目付近に追加。
2014/11/19【追記】:配置と仕上がりが違う場合は別商品としてカートへ登録するようにした
for ($i = 0; $i <= $max; $i++) {
if ($this->cartSession[$productTypeId][$i]['id'] == $product_class_id && $this->cartSession[$productTypeId][$i]['position_set'] == $position_set && $this->cartSession[$productTypeId][$i]['finish_set'] == $finish_set) { //【2014/11/19追記】
$val = $this->cartSession[$productTypeId][$i]['quantity'] + $quantity;
if (strlen($val) <= INT_LEN) {
$this->cartSession[$productTypeId][$i]['quantity'] += $quantity;
}
$find = true;
}
}
if (!$find) {
$this->cartSession[$productTypeId][$max+1]['id'] = $product_class_id;
$this->cartSession[$productTypeId][$max+1]['quantity'] = $quantity;
$this->cartSession[$productTypeId][$max+1]['cart_no'] = $this->getNextCartID($productTypeId);
//【追記】
$this->cartSession[$productTypeId][$max+1]['position_set'] = $position_set;
$this->cartSession[$productTypeId][$max+1]['finish_set'] = $finish_set;
}
②306行目付近に追加。
$arrNecessaryItems = array(
'product_id' => true,
'product_class_id' => true,
'name' => true,
'price02' => true,
'point_rate' => true,
'main_list_image' => true,
'main_image' => true,
'product_code' => true,
'stock' => true,
'stock_unlimited' => true,
'sale_limit' => true,
'class_name1' => true,
'classcategory_name1' => true,
'class_name2' => true,
'classcategory_name2' => true,
//【追記】
'position_set' => true,
'finish_set' => true
);
カスタマイズファイル:pages/products/LC_Page_Products_Detail.php
①49行目付近に追加。
/** 配置 */
public $arrPOSITION; //【追記】
/** 仕上がり */
public $arrFINISH; //【追記】
②64行目付近に追加。getMasterDataでマスターデータを取得できる。
parent::init();
$masterData = new SC_DB_MasterData_Ex();
$this->arrSTATUS = $masterData->getMasterData('mtb_status');
$this->arrSTATUS_IMAGE = $masterData->getMasterData('mtb_status_image');
$this->arrDELIVERYDATE = $masterData->getMasterData('mtb_delivery_date');
$this->arrRECOMMEND = $masterData->getMasterData('mtb_recommend');
$this->arrPOSITION = $masterData->getMasterData('mtb_position'); //【追記】
$this->arrFINISH = $masterData->getMasterData('mtb_finish'); //【追記】
③352行目付近に追加。
$objFormParam->addParam('規格1', 'classcategory_id1', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('規格2', 'classcategory_id2', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('数量', 'quantity', INT_LEN, 'n', array('EXIST_CHECK', 'ZERO_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('管理者ログイン', 'admin', INT_LEN, 'a', array('ALNUM_CHECK','MAX_LENGTH_CHECK'));
$objFormParam->addParam('商品ID', 'product_id', INT_LEN, 'n', array('EXIST_CHECK', 'ZERO_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('お気に入り商品ID', 'favorite_product_id', INT_LEN, 'n', array('ZERO_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('商品規格ID', 'product_class_id', INT_LEN, 'n', array('EXIST_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
// 【追加】
$objFormParam->addParam('配置', 'position_set', MTEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('仕上がり', 'finish_set', MTEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
// 値の取得
$objFormParam->setParam($_REQUEST);
④402行目付近に追加。
// 複数項目チェック
if ($tpl_classcat_find1) {
$objErr->doFunc(array('規格1', 'classcategory_id1'), array('EXIST_CHECK'));
}
if ($tpl_classcat_find2) {
$objErr->doFunc(array('規格2', 'classcategory_id2'), array('EXIST_CHECK'));
}
//【追記】
$objErr->doFunc(array('配置', 'position_set'), array('SPTAB_CHECK'));
$objErr->doFunc(array('仕上がり', 'finish_set'), array('SPTAB_CHECK'));
break;
⑤508行目付近に追加。それぞれのIDをマスターデータの表記に置きかえ。
if (count($this->arrErr) == 0) {
$objCartSess = new SC_CartSession_Ex();
$product_class_id = $this->objFormParam->getValue('product_class_id');
//【追記】
$position = $this->arrPOSITION[$this->objFormParam->getValue('position_set')];
$finish = $this->arrFINISH[$this->objFormParam->getValue('finish_set')];
//【追記】
$objCartSess->addProduct($product_class_id, $this->objFormParam->getValue('quantity'), $position, $finish);
// 開いているカテゴリーツリーを維持するためのパラメーター
$arrQueryString = array(
'product_id' => $this->objFormParam->getValue('product_id'),
);
}
カスタマイズファイル:pages/cart/LC_Page_Cart.php
①219行目付近に追加。
$objFormParam = new SC_FormParam_Ex();
$objFormParam->addParam('カートキー', 'cartKey', INT_LEN, 'n', array('NUM_CHECK','MAX_LENGTH_CHECK'));
$objFormParam->addParam('カートナンバー', 'cart_no', INT_LEN, 'n', array('NUM_CHECK', 'MAX_LENGTH_CHECK'));
//【追記】
$objFormParam->addParam('配置', 'position_set', MTEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
$objFormParam->addParam('仕上がり', 'finish_set', MTEXT_LEN, 'KVa', array('SPTAB_CHECK', 'MAX_LENGTH_CHECK'));
// スマートフォン版での数量変更用
$objFormParam->addParam('数量', 'quantity', INT_LEN, 'n', array('ZERO_CHECK', 'NUM_CHECK', 'MAX_LENGTH_CHECK'));
カスタマイズファイル:helper/SC_Helper_Purchase.php
①754行目付近に追加。
// 詳細情報を生成
$objProduct = new SC_Product_Ex();
$i = 0;
$arrDetail = array();
foreach ($cartItems as $item) {
$p =& $item['productsClass'];
$arrDetail[$i]['order_id'] = $orderParams['order_id'];
$arrDetail[$i]['product_id'] = $p['product_id'];
$arrDetail[$i]['product_class_id'] = $p['product_class_id'];
$arrDetail[$i]['product_name'] = $p['name'];
$arrDetail[$i]['product_code'] = $p['product_code'];
$arrDetail[$i]['classcategory_name1'] = $p['classcategory_name1'];
$arrDetail[$i]['classcategory_name2'] = $p['classcategory_name2'];
$arrDetail[$i]['point_rate'] = $item['point_rate'];
$arrDetail[$i]['price'] = $item['price'];
$arrDetail[$i]['quantity'] = $item['quantity'];
$arrDetail[$i]['tax_rate'] = $item['tax_rate'];
$arrDetail[$i]['tax_rule'] = $item['tax_rule'];
$arrDetail[$i]['position_set'] = $item['position_set']; //【追記】
$arrDetail[$i]['finish_set'] = $item['finish_set']; //【追記】
// 在庫の減少処理
if (!$objProduct->reduceStock($p['product_class_id'], $item['quantity'])) {
$objQuery->rollback();
SC_Utils_Ex::sfDispSiteError(SOLD_OUT, '', true);
}
$i++;
}
$this->registerOrderDetail($orderParams['order_id'], $arrDetail);
②182行目付近に追加。
$objQuery =& SC_Query_Ex::getSingletonInstance();
$dbFactory = SC_DB_DBFactory_Ex::getInstance();
$col = <<< __EOS__
T3.product_id,
T3.product_class_id as product_class_id,
T3.product_type_id AS product_type_id,
T2.product_code,
T2.product_name,
T2.classcategory_name1 AS classcategory_name1,
T2.classcategory_name2 AS classcategory_name2,
T2.position_set,//【追記】
T2.finish_set,//【追記】
T2.price,
T2.quantity,
T2.point_rate,
T2.tax_rate,
T2.tax_rule,
表示から注文受付まではこんな感じになりました。
次回、管理側のカスタマイズへ続きます。たぶん。
2014/11/17【追記】
カートや管理画面では規格ごとの商品IDで管理されているので、今回の配置や仕上がりを変更しても同じ商品として扱われてしまう。って事に気づく。同じ商品でも配置や仕上がりが違えば別の商品としたいのだけど。。。
2014/11/19【追記】
カートに入れた時に、配置または仕上がりが違えば別の商品として登録するように変更しました。
[…] 長くなったので次回(クラスファイルの修正)へ続きます。 […]
丁寧な説明で助かりました!
バージョンが2.13で説明されてる方が見つからず、探していた所で拝見して、初心者には目から鱗でした。
これから、管理画面を作成してみます。が、うまく出来るかどうか。。
アップされるの、期待しています!
大変参考になる記事をありがとうございます。
次回の「管理側のカスタマイズ」が待ち遠しいです。
記事追加の予定はないのでしょうか?
こんばんは。現状でEC-CUBEを触る環境から離れてしまったため、今のところ追加の予定はありません。。。ご期待に添えずに申し訳ないです!