発送日目安が設定されている商品では、購入する際にカート内でお届け日を指定することができます。
ゴールデンウィークやお盆など、ある特定の日付をお届け日として指定できないようにしたいこともあるかと思います。そんな時のために、お届け先指定のプルダウン内に特定の日付を表示しないようにする方法をご紹介したいと思います。
EC-CUBEのお届け日に特定の日付を表示させない方法
特定の日付をお届け日に表示させないようにするには、/data/class/helper/SC_Helper_Purchase.phpを編集します。
627行目あたりに「public function getDateArray」という箇所があります。「お届け可能日のスタート値から, お届け日の配列を取得する」というコメントの通り、この関数ではお届け日の値を取得しています。
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 | 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(); $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 )); //指定した日付を選択肢に表示しない $flg_stop =false; if (( $y ==2016)&&( $m ==8)) { if (( $d ==11)||( $d ==12)||( $d ==13)||( $d ==14)||( $d ==15)||( $d ==16)) { $flg_stop =true; } } if (! $flg_stop ) { $val = sprintf( '%04d/%02d/%02d(%s)' , $y , $m , $d , $arrWDAY [ $w ]); $arrDate [ $val ] = $val ; } } } else { $arrDate = false; } return $arrDate ; } |
ハイライトしている部分(16~22行目と24行目、27行目)が追加箇所です。上記の例では、8月11日~8月16日までを非表示にしています。
$yで年、$mで月、$dで日を指定して、条件に合う場合は値(日付)を返さず、条件に合わない場合は通常通り日付を返す処理をしています。
$yと$mと$dの値を変えれば、好きな日付を非表示にすることができます。
あとがき
お届け日の中から特定の日付を非表示にするという場面はそんなにないかもしれませんが、覚えておくといざという時に役立つと思います。
コメント失礼します。
もし、月をまたいで「特定の日付を表示させない方法」8月から9月や、12月から1月の期間で表示させたくありません。 描き方教えていただけますでしょうか?
コメントありがとうございます。
記事の例ですと、「if (($y==2016)&&($m==8))」が年月の指定(2016年8月)、「if (($d==11)||($d==12)||($d==13)||($d==14)||($d==15)||($d==16))」が11日~16日と日付を指定しています。
この部分で表示させたくない期間を調整してあげます。
未検証ですが、2019年8月と9月を非表示にする場合、
以下のように8月と9月で「$flg_stop=true」を返すように
してあげれば良いと思います。
$flg_stop=false;
if (($y==2019)) {
if (($m==8)||($m==9)) {
$flg_stop=true;
}
}