またもや、開発コミュニティに挙がっていたネタを拝借。
よく会員価格を設定するというカスタマイズがありますが、
その場合はたいてい商品登録フォームに会員価格欄を設け、その値が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 に割引価格が格納されると思います。
商品規格を使用する場合は、他のコードも触らないといけないと思われます。