takeblo

【EC-CUBE】 店休日に配送日指定ができないようにするカスタマイズ

  • 投稿日:
  • by
  • Category:

中津川の栗きんとんは、防腐剤などは一切使用しない生菓子のため、消費期限が短いです。
栗きんとんのように、消費期限が短い商品をネットショップで販売した場合、届け先が不在だったりすると、とても困りますよね。そんなとき、お店とお客様、または配送業者と連絡が取れれば迅速に対応できるのですが、たまたま店休日だったりすると、商品ロスになってしまいます。

そこで、EC-CUBE2.4.1で、店休日に配達指定ができないようにカスタマイズしてみました。

data/class/pages/shopping/LC_Page_Shopping_Payment.phpを書き換えます。店休日の追加はECサイト管理ページの 基本情報管理-定休日管理から追加します。

ただしこの方法ですと、SHOPマスタ登録から定休日にチェック入れると日付がずれますので^^;、定休日にはチェック入れないでください。ようはカレンダー機能が使えなくなるよってことです^^; ややこしいので、そのあたり誰か直してくださいwww

赤字を追加すればオッケー^^;

//配達可能日のスタート値から、配達日の配列を取得する
function lfGetDateArray($start_day, $end_day) {
$masterData = new SC_DB_MasterData();
$arrWDAY = $masterData->getMasterData("mtb_wday");
//配達可能日のスタート値がセットされていれば
if($start_day >= 1) {
$now_time = time();

// 定休日設定を取得
require_once(CLASS_PATH . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar.php");
$BlocCalendar = new LC_Page_FrontParts_Bloc_Calendar();
$BlocCalendar->arrRegularHoliday = $BlocCalendar->lfGetRegularHoliday();
$BlocCalendar->arrHoliday = $BlocCalendar->lfGetHoliday();
// 配達可能日の起点を指定「営業日」以降に変更
for ($i = 1, $j = 1; $j < $start_day; $i++ )
{
// 定休日管理で設定された休日
$tmp_time = $now_time + ($i * 24 * 3600);
list($y, $m, $d, $w) = split(" ", date("y m d w", $tmp_time));
$m = intval( $m );
$d = intval( $d );
$w = intval( $w );
if ( $BlocCalendar->lfCheckHoliday( $y, $m, $d ) )
{
continue;
}
// 日数加算
$j++;
}
$max_day = $start_day + $end_day;
// 集計
for ($i = $start_day; $i < $max_day; $i++) {
// 基本時間から日数を追加していく
$ng=0;
$tmp_time = $now_time + ($i * 24 * 3600);
list($y, $m, $d, $w) = split(" ", date("y m d w", $tmp_time));
if(isset($BlocCalendar->arrHoliday[$m])){
foreach($BlocCalendar->arrHoliday[$m] as $id =>$key){
if($key==$d)$ng=1;
}
}
if($ng==1)continue;
$val = sprintf("%02d/%02d/%02d(%s)", $y, $m, $d, $arrWDAY[$w]);
$arrDate[$val] = $val;
}
} else {
$arrDate = false;
}
return $arrDate;
}

追記

配送日指定が翌年にまたぐ場合、なぜか指定ができてしまいます。

そんなときはしょうがないので、手打ちで対応^^;

たとえば、2010年1月 1日・2日・3日・7日・14日...と休みの場合

if($ng==1)continue;
$val = sprintf("%02d/%02d/%02d(%s)", $y, $m, $d, $arrWDAY[$w]);

の後に
if($y==10 && $m==1 && $d==1)continue;
if($y==10 && $m==1 && $d==2)continue;
if($y==10 && $m==1 && $d==3)continue;
if($y==10 && $m==1 && $d==7)continue;
if($y==10 && $m==1 && $d==14)continue;
if($y==10 && $m==1 && $d==21)continue;
if($y==10 && $m==1 && $d==28)continue;
if($y==10 && $m==2 && $d==4)continue;
if($y==10 && $m==2 && $d==11)continue;

というように入力します。

めんどくさいです・・・orz