またもや、開発コミュニティに挙がっていたネタを拝借。
よく会員価格を設定するというカスタマイズがありますが、
その場合はたいてい商品登録フォームに会員価格欄を設け、その値がDBに格納されるようにするだろうと思います。
今回は、販売価格に対して、あらかじめ定義した割引率に基づいて、
割引価格A、割引価格B、割引価格Cを計算し、データベースに格納したいと思います。
ちなみに、割引率はマスターデータ管理を使って、%で定義します。
また、商品規格は使用しないという前提です。
んじゃレッツ、チャレンジ。
1.割引率を格納するマスターテーブル mtb_discount を作成。
CREATE TABLE mtb_discount (
id smallint,
name text,
rank smallint NOT NULL DEFAULT 0,
PRIMARY KEY (id)
);
2.作成した mtb_discount に値を挿入。管理画面>システム設定>マスターデータ管理 が楽チン。
ID:1 値:70 ID:2 値:60 ID:3 値:50
3.商品規格テーブルにカラムを追加。
alter table dtb_products_class add column discount_price1 numeric; alter table dtb_products_class add column discount_price2 numeric; alter table dtb_products_class add column discount_price3 numeric;
4.data/class/pages/admin/products/LC_Page_Admin_Products_Product.php の lfInsertDummyProductClassメソッドを以下のように修正
/**
* 規格を設定していない商品を商品規格テーブルに登録
*
* @param array $arrList
* @return void
*/
function lfInsertDummyProductClass($arrList) {
$objQuery =& SC_Query_Ex::getSingletonInstance();
$objDb = new SC_Helper_DB_Ex();
// 配列の添字を定義
$checkArray = array('product_class_id', 'product_id', 'product_code', 'stock', 'stock_unlimited', 'price01', 'price02', 'sale_limit', 'deliv_fee', 'point_rate' ,'product_type_id', 'down_filename', 'down_realfilename');
$sqlval = SC_Utils_Ex::sfArrayIntersectKeys($arrList, $checkArray);
$sqlval = SC_Utils_Ex::arrayDefineIndexes($sqlval, $checkArray);
$sqlval['stock_unlimited'] = $sqlval['stock_unlimited'] ? UNLIMITED_FLG_UNLIMITED : UNLIMITED_FLG_LIMITED;
$sqlval['creator_id'] = strlen($_SESSION['member_id']) >= 1 ? $_SESSION['member_id'] : '0';
// ここから追加
$masterData = new SC_DB_MasterData_Ex();
$arrDiscount = $masterData->getMasterData('mtb_discount');
$sqlval['discount_price1'] = $sqlval['price02'] * $arrDiscount[1] / 100;
$sqlval['discount_price2'] = $sqlval['price02'] * $arrDiscount[2] / 100;
$sqlval['discount_price3'] = $sqlval['price02'] * $arrDiscount[3] / 100;
if (strlen($sqlval['product_class_id']) == 0) {
$sqlval['product_class_id'] = $objQuery->nextVal('dtb_products_class_product_class_id');
$sqlval['create_date'] = 'CURRENT_TIMESTAMP';
$sqlval['update_date'] = 'CURRENT_TIMESTAMP';
// INSERTの実行
$objQuery->insert('dtb_products_class', $sqlval);
} else {
$sqlval['update_date'] = 'CURRENT_TIMESTAMP';
// UPDATEの実行
$objQuery->update('dtb_products_class', $sqlval, 'product_class_id = ?', array($sqlval['product_class_id']));
}
}
これで管理画面>商品管理 から商品の新規登録や編集を行えば、dtb_products_class に割引価格が格納されると思います。
商品規格を使用する場合は、他のコードも触らないといけないと思われます。











