EC-CUBEでは、商品登録ページの「発送日目安」の日数と、注文ページの「お届け日の指定」が連動していますが、デフォルトのままでは、定休日(例えば、土日祝)を考慮してくれません。
例えば、お客様の注文が金曜日の時、「発送日目安」を翌日発送にしていると、マスターデータの設定にもよりますが、明後日からお届け日の指定ができてしまいます。
この場合、明後日は日曜日です。ショップが土日祝を定休日としている場合、発送は月曜日になりますので、最短でも火曜日のお届けになってしまいます。
そのため、定休日を考慮したお届け日指定のカスタマイズは必須ですね。
基本情報管理 → 定休日管理でセットした、定休日を考慮するようにカスタマイズしました。
★2.12の場合
data/class/helper/SC_Helper_Purchase.phpを変更
/** * お届け可能日のスタート値から, お届け日の配列を取得する. */ function getDateArray($start_day, $end_day) { $masterData = new SC_DB_MasterData_Ex(); $arrWDAY = $masterData->getMasterData('mtb_wday'); //お届け可能日のスタート値がセットされていれば if ($start_day >= 1) { $now_time = time(); /* ここから追加 */ // カレンダーブロック表示用オブジェクトを生成し、定休日設定を取得 require_once(CLASS_REALDIR . "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) = explode(" ", date("Y m d w", $tmp_time)); $m = intval( $m ); $d = intval( $d ); $w = intval( $w ); if ( $BlocCalendar->lfCheckHoliday( $y, $m, $d ) ) { continue; } // 日数加算 $j++; } // スタート値を調整 $start_day += $i - $j; /* 追加ここまで */ $max_day = $start_day + $end_day; // 集計 for ($i = $start_day; $i < $max_day; $i++) { // 基本時間から日数を追加していく $tmp_time = $now_time + ($i * 24 * 3600); list($y, $m, $d, $w) = explode(' ', date('Y m d w', $tmp_time)); $val = sprintf('%04d/%02d/%02d(%s)', $y, $m, $d, $arrWDAY[$w]); $arrDate[$val] = $val; } } else { $arrDate = false; } return $arrDate; }
★2.13の場合
data/class/helper/SC_Helper_Purchase.phpを変更
[2015/3/23 追加修正]EC-CUBE開発コミュニティのスレッドより
http://xoops.ec-cube.net/modules/newbb/viewtopic.php?topic_id=14921&forum=10&post_id=66718
public function getDateArray($start_day, $end_day) { $masterData = new SC_DB_MasterData_Ex(); $arrWDAY = $masterData->getMasterData('mtb_wday'); //お届け可能日のスタート値がセットされていれば if ($start_day >= 1) { $now_time = time(); /* 追加 ここから */ $horiday = new SC_Date_Ex(); $start_day_i = 1; for ($i = 1; ; $i++) { // 基本時間から日数を追加していく $tmp_time = $now_time + ($i * 24 * 3600); list($y, $m, $d, $w) = explode(' ', date('Y m d w', $tmp_time)); if ($horiday->isHoliday($y, $m, $d)) { } else { if ($start_day_i >= $start_day) { // 即日発送 = 1($start_day_new) $start_day_new = $i; break; } $start_day_i++; } } $start_day = $start_day_new; /* 追加 ここまで */ $max_day = $start_day + $end_day; // 集計 for ($i = $start_day; $i < $max_day; $i++) { // 基本時間から日数を追加していく $tmp_time = $now_time + ($i * 24 * 3600); list($y, $m, $d, $w) = explode(' ', date('Y m d w', $tmp_time)); $val = sprintf('%04d/%02d/%02d(%s)', $y, $m, $d, $arrWDAY[$w]); $arrDate[$val] = $val; } } else { $arrDate = false; } return $arrDate; }
あと下記は、裏技といいますか、2.13でも、2.12のコードを利用することで動きました。あまりお勧めできません。
不具合は、今のところ見つかっていませんが。。。
■カスタマイズするファイル
(1)data/class/pages→frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar.php
(2.12のファイルと入れ替え)
(2)data/class/helper/SC_Helper_Purchase.php
(2.13のファイルに、2.12用のカスタマイズを加えたファイル)
■変更点
(1)2.13では、functionの前に、public が付いているので、両ファイルとも、functionの前に、publicを付加
public function ・・・続く
(2)関数名「lfCheckHoliday」となっている部分を、両ファイルとも「isHoliday」に修正
関数名についてですが、
LC_Page_FrontParts_Bloc_Calendar.php、SC_Helper_Purchase.phpとも、同じ関数名を利用しているなら「lfCheckHoliday」のままでも動くのかもしれないですが未確認です。
サーバー環境によって違うかもしれませんので、
くれぐれも、バックアップを取ってからお試しください。