2012年10月9日カテゴリー:

EC-CUBE2.12:期間を限定して商品を販売する

▼ここでのカスタマイズファイルをすべてダウンロードできます。
必要な箇所だけコピーしてご利用ください。
他のカスタマイズも含まれている場合がありますので、ファイルの上書きは絶対におやめください。
こちらから(facebookユーザーのみ)

1 データベース、dtb_productsテーブルに販売終了日と販売開始日のカラムを追加する。

【MySQL】

[php]
ALTER TABLE dtb_products ADD endsell_date datetime
[/php]
[php]
ALTER TABLE dtb_products ADD arrival_date datetime
[/php]

【PostgreSQL】

[php]
ALTER TABLE dtb_products ADD endsell_date timestamp
[/php]
[php]
ALTER TABLE dtb_products ADD arrival_date timestamp
[/php]

2 カートセッションの管理のためのクラス変更
■data/class/SC_CartSession.phpに追加する場合は、function checkProductsメソッド内の最後に追加。

[php]
/*
* 販売開始、販売終了チェック
*/
if($item[‘productsClass’][“arrival”] == “0”) {
$tpl_message .= “※「” . $product[‘name’] . “」は販売開始前のため購入はできません。\n”;
} else if($item[‘productsClass’][“endsell”] == “0”) {
$tpl_message .= “※「” . $product[‘name’] . “」は販売終了のため購入はできません。\n”;
}
[/php]

3 商品関連処理のためのクラス変更
■data/class/SC_Product.phpに追加

 function listsメソッド内に追加

[php]
/* ▼期間限定販売①/② */
,endsell_date
,arrival_date
,(SELECT CASE WHEN coalesce(endsell_date, NOW()) = NOW() THEN 1 WHEN endsell_date >= NOW() THEN 1 ELSE 0 END) AS endsell, (SELECT CASE WHEN coalesce(arrival_date,NOW()) = NOW() THEN 1 WHEN NOW() >= arrival_date THEN 1 ELSE 0 END) AS arrival
/* ▲期間限定販売 */
[/php]

 function alldtlSQLメソッド内に追加

[php]
/* ▼期間限定販売②/② */
,dtb_products.endsell_date
,dtb_products.arrival_date
,(SELECT CASE WHEN coalesce(dtb_products.endsell_date, NOW()) = NOW() THEN 1 WHEN dtb_products.endsell_date >= NOW() THEN 1 ELSE 0 END) AS endsell
,(SELECT CASE WHEN coalesce(dtb_products.arrival_date,NOW()) = NOW() THEN 1 WHEN NOW() >= dtb_products.arrival_date THEN 1 ELSE 0 END) AS arrival
/* ▲期間限定販売 */
[/php]

4 「販売終了日」と「販売開始日」を登録できるようにする

(1)管理画面の商品登録に「販売終了日」と「販売開始日」項目を追加
■data/class/pages/admin/products/LC_Page_Admin_Products_Product.phpに追加する場合

 function actionメソッド内に追加

[php]
$objDate = new SC_Date_Ex();
[/php]

 同じくfunction actionメソッド内に追加

[php]
$this->arrYear = $objDate->getYear();
$this->arrMonth = $objDate->getMonth();
$this->arrDay = $objDate->getDay();
[/php]

 function lfInitFormParamメソッド内に追加

[php]
$objFormParam->addParam(“販売終了年”, “endsell_year”, INT_LEN, ‘n’, array(“MAX_LENGTH_CHECK”, “NUM_CHECK”));
$objFormParam->addParam(“販売終了月”, “endsell_month”, INT_LEN, ‘n’, array(“MAX_LENGTH_CHECK”, “NUM_CHECK”));
$objFormParam->addParam(“販売終了日”, “endsell_day”, INT_LEN, ‘n’, array(“MAX_LENGTH_CHECK”, “NUM_CHECK”));
$objFormParam->addParam(“販売開始年”, “arrival_year”, INT_LEN, ‘n’, array(“MAX_LENGTH_CHECK”, “NUM_CHECK”));
$objFormParam->addParam(“販売開始月”, “arrival_month”, INT_LEN, ‘n’, array(“MAX_LENGTH_CHECK”, “NUM_CHECK”));
$objFormParam->addParam(“販売開始日”, “arrival_day”, INT_LEN, ‘n’, array(“MAX_LENGTH_CHECK”, “NUM_CHECK”));
[/php]

 function lfCheckError_Editメソッド内に追加

[php]
$objErr->doFunc(array(“販売開始日”,”販売終了日”, “arrival_year”, “arrival_month”, “arrival_day”, “endsell_year”, “endsell_month”, “endsell_day”), array(“CHECK_SET_TERM”));
[/php]

  function lfGetProductData_FromDBメソッド内に追加

[php]
// 販売終了日
if(isset($arrProduct[0][‘endsell_date’])){
$arrProduct[0][‘endsell_year’] = substr($arrProduct[0][‘endsell_date’], 0,4);
$arrProduct[0][‘endsell_month’] = substr($arrProduct[0][‘endsell_date’], 5,2);
$arrProduct[0][‘endsell_day’] = substr($arrProduct[0][‘endsell_date’], 8,2);
}
// 販売開始日
if(isset($arrProduct[0][‘arrival_date’])){
$arrProduct[0][‘arrival_year’] = substr($arrProduct[0][‘arrival_date’], 0,4);
$arrProduct[0][‘arrival_month’] = substr($arrProduct[0][‘arrival_date’], 5,2);
$arrProduct[0][‘arrival_day’] = substr($arrProduct[0][‘arrival_date’], 8,2);
}
[/php]

 function lfRegistProductメソッド内に追加

[php]
“endsell_date”, “arrival_date”,
[/php]

 同じくfunction lfRegistProductメソッド内に追加

[php]
if(!SC_Utils_Ex::isBlank($arrList[‘endsell_year’])) {
$sqlval[‘endsell_date’] = $arrList[‘endsell_year’] . ‘/’
. $arrList[‘endsell_month’] . ‘/’
. $arrList[‘endsell_day’]
. ‘ 23:59:59’;
}else{
$sqlval[‘endsell_date’] = “”;
}
if(!SC_Utils_Ex::isBlank($arrList[‘arrival_year’])) {
$sqlval[‘arrival_date’] = $arrList[‘arrival_year’] . ‘/’
. $arrList[‘arrival_month’] . ‘/’
. $arrList[‘arrival_day’]
. ‘ 00:00:00’;
}else{
$sqlval[‘arrival_date’] = “”;
}
[/php]

(2)テンプレートファイルへ追加

 ■data/Smarty/templates/admin/products/product.tpl
「販売制限数」の後に追加

[php]

販売開始日


日 販売終了日


[/php]

 ■data/Smarty/templates/admin/products/confirm.tpl
「販売制限数」の後に追加

[php]

販売開始日 未登録 販売終了日 未登録

[/php]

5 「販売終了日」と「販売開始日」をフロントページで表示する

(1)商品一覧ページ

 PC ■data/Smarty/templates/default/products/list.tpl

[php]

販売開始日:


販売期間終了:
まで



[/php]

 携帯 ■data/Smarty/templates/mobile/products/list.tpl

[php]








円~




申し訳ございませんが、只今品切れ中です。





販売開始日:



販売期間終了:まで




[/php]

③ スマートフォン ■data/Smarty/templates/sphone/products/list.tpl

「商品価格」と「商品コメント」の間に

[php]



申し訳ございませんが、只今品切れ中です。



販売開始日:

販売期間終了:まで


[/php]

(2)商品詳細ページ

 PC ■data/Smarty/templates/default/products/detail.tpl

[php]



販売開始日:


販売期間終了:まで









申し訳ございませんが、只今品切れ中です。


販売開始までしばらくお待ちください。

販売期間は終了いたしました。



[/php]

 携帯 ■data/Smarty/templates/mobile/products/detail.tpl
★関連カテゴリ★の後に

[php]

関連カテゴリ:



販売期間終了:まで




申し訳ございませんが、只今品切れ中です。


[/php]

 スマートフォン ■data/Smarty/templates/sphone/products/detail.tpl
「販売価格」と「ポイント」の間に

[php]


販売開始日:


販売期間終了:まで



[/php]

「メーカーURL」と「買い物かご」の間に

[php]




[/php]

「買い物かご」の後に

[php]

販売開始までしばらくお待ちください。

販売期間は終了いたしました。



[/php]

(3)CSS
■html/user_data/packages/default/css/contents.css
商品一覧の箇所へ

[css]
/* 期間限定販売 */
div.listrightbloc .arrival_endsell {
padding:3px;
background-color: #F3F3F3;
font-weight:bold;
}
div.listrightbloc .arrival_endsell span {
color:#F00;
}
[/css]

商品詳細の箇所へ

[css]
/* 期間限定販売 */
div#detailrightbloc .arrival_endsell {
font-weight:bold;
}
div#detailrightbloc .arrival_endsell span {
color:#F00;
}
[/css]