Hatena::ブログ(Diary)

ちらうら PHPとCMSとWEBデザインを貪る  RSSフィード

DesignerでもないEnginierでもないProgramerでもない職人目指して奮闘中・・・

2011-04-08

2.11.0系 商品購入手続き画面のお届け日に定休日を反映させる

フォーラムに投げた内容をこちらにも転載。

そういえば2.11.0ではどうやるんだろう?と思って試しにやってみたら、

なんとなく出来た気が・・・

内容に問題があったらご報告お願いします!


/data/class/helper/SC_Helper_Purchase.php

/**
* お届け可能日のスタート値から, お届け日の配列を取得する.
*/
function getDateArray($start_day, $end_day) {

/*---------- ↓ 追加 ↓ --------*/
//カレンダーを呼び出す
require_once(CLASS_REALDIR . "pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar.php");
$blockCalender = new LC_Page_FrontParts_Bloc_Calendar();
/*---------- ↑ 追加 ↑ --------*/

$masterData = new SC_DB_MasterData();
$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));

/*---------- ↓ 変更 ↓ --------*/
//休日かどうかチェックする
if(!$blockCalender->lfCheckHoliday_Payment($y, $m, $d)){
$val = sprintf("%04d/%02d/%02d(%s)", $y, $m, $d, $arrWDAY[$w]);
$arrDate[$val] = $val;
}
/*---------- ↑ 変更 ↑ --------*/

    }
  } else {
    $arrDate = false;
  }
  return $arrDate;
}

/data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar

/*---------- ↓ 追加 ↓ --------*/
/**
* 休日チェック取得.
* (購入手続き内、配送日時判定) 
*/
function lfCheckHoliday_Payment($year, $month, $day) {
  // 休日取得取得
  $this->arrHoliday = $this->lfGetHoliday();
  // 定休日取得取得
  $this->arrRegularHoliday = $this->lfGetRegularHoliday();
  if (!empty($this->arrHoliday[$month])) {
    if (in_array($day, $this->arrHoliday[$month])) {
      return true;
    }
  }
  if (!empty($this->arrRegularHoliday)) {
    $day = date('w', mktime(0,0,0 ,$month, $day, $year));
    if (in_array($day, $this->arrRegularHoliday)) {
      return true;
    }
  }
  return false;
}
/*---------- ↑ 追加 ↑ --------*/

てらりんてらりん 2012/03/26 17:35 参考にさせていただきました。ありがとうございます。
私がこちらを参考にしてカスタマイズしたEC-CUBEのバージョンが2.11.5だからかもしれませんが、

list($y, $m, $d, $w) = explode(" ", date("Y m d w", $tmp_time));



list($y, $m, $d, $w) = explode(" ", date("Y n d w", $tmp_time));

と、「m」が「n」でなければ、休みが拾えませんでした。
「m」だと3月は「03」なのですが、実際に引っ張る対象の月は[3]となっているため認識しなかったようです。
ちょっと報告がてら……失礼いたしました。

AI-615AI-615 2012/09/27 19:34 てらりん様

有益なご報告ありがとうございました。
2.11.0以降のバージョンでの検証をおこなっておりませんでしたので、
手元に環境ができましたらそちらで試してみようと思います。(・ω・)

投稿したコメントは管理者が承認するまで公開されません。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証