EC-CUBE のカレンダーを便利にする

公式サイトのフォーラムにも書いたが、埋もれて探しづらくなりそうなので、備忘録としてこちらにも残すことにした。

【機能改良項目】
・土曜日にスタイルシートクラスを付ける
・日曜・祝日は休業日ではない、あくまでもカレンダー上の「赤い日」
・休業日はさらにスタイルシートクラスを追加
・以上により、スタイルシートは4つとなり、クラスは以下のとおり
 1)日曜祝日 = sun
 2)土曜日  = sat
 3)休業日  = off
 4)その他  = 無指定
・休業日は別途ファイルを読み込む。設定可能は以下のとおり。
 1)毎週○○曜日休業 の設定追加
 2)第○の▲曜日休業 の設定追加
 3)上記該当日でも、特別に営業する日

【スタイルシートの例】

#block-calendar .sun {
background: #FFEECC;
color: #E04A00;
}
#block-calendar .sat {
    background: #e6e6fa;
    color: #6495ed;
}
#block-calendar .off {
    background: #ffc0cb;
    color: #ff6347;
	font-weight: bolder;
}

【カレンダーの生成部分】
data/class/pages/frontparts/bloc/LC_Page_FrontParts_Bloc_Calendar.php
2箇所の関数を変更するので、変更関数の全ソースを掲載

    function init() {
        parent::init();
        $bloc_file = 'calendar.tpl';
        $this->setTplMainpage($bloc_file);

// カレンダーの追加初期設定
		require_once (DATA_PATH. 'calendar_conf.php');
		$this->setHoliday_w    = $cal_holiday;
		$this->setHoliday_open = $cal_open;
		$this->setHoliday_wnum = $cal_w_num;
	}
// カレンダー情報取得
    function lfGetCalendar($disp_month = 1){

        for ($j = 0; $j <= $disp_month-1; ++$j) {
            $year = date('Y');
            $month = date('n') + $j;
            if ($month > 12) {
                $month = $month%12;
                $year = $year + $month%12;
            }

            $Month = new Calendar_Month_Weekdays($year, $month, 0);
            $Month->build();
            $i = 0;
			$z = 1; // 週
			$w_count = array(0,0,0,0,0,0,0); // 曜日毎のカウント

            while ($Day = $Month->fetch()) {

				if ($month == $Day->month) {
                    $arrCalendar[$j][$i]['in_month'] = true;
                } else {
                    $arrCalendar[$j][$i]['in_month'] = false;
                }
                $arrCalendar[$j][$i]['first'] = $Day->first;
                $arrCalendar[$j][$i]['last'] = $Day->last;
                $arrCalendar[$j][$i]['empty'] = $Day->empty;
                $arrCalendar[$j][$i]['year'] = $year;
                $arrCalendar[$j][$i]['month'] = $month;
                $arrCalendar[$j][$i]['day'] = $Day->day;

// 曜日を求めた後、曜日の出現回数をカウントする
				$w_day = date('w',mktime(0,0,0,$arrCalendar[$j][$i]['month'],$arrCalendar[$j][$i]['day'],$arrCalendar[$j][$i]['year']));
				if($arrCalendar[$j][$i]['in_month']){
					$w_count[$w_day] ++;
				}

// 第何週かのカウント
                if($Day->last) {
					$z ++;
                }

// 1=日曜日,2=土曜日,3=休業日,4=その他
				if ($this->lfCheckHoliday($month, $Day->day)) {
                    $arrCalendar[$j][$i]['holiday'] = 3;
                } elseif($Day->first) {
                    $arrCalendar[$j][$i]['holiday'] = 1;
                } elseif($Day->last) {
                    $arrCalendar[$j][$i]['holiday'] = 2;
                } else {
                    $arrCalendar[$j][$i]['holiday'] = 4;
                }

// 毎週○○曜日が休みの設定をオーバーライトする
				foreach($this->setHoliday_w as $chk){
					if ($w_day == $chk){
	                    $arrCalendar[$j][$i]['holiday'] = 3;
					}
				}

// 第○▲曜日が休みの設定をオーバーライトする
				if ($this->setHoliday_wnum[$w_count[$w_day]][$w_day]){
	                    $arrCalendar[$j][$i]['holiday'] = 3;
				}

// 決まった休みでも特別に営業する場合などをオーバーライトする
				foreach($this->setHoliday_open as $chk){
					$w_day = $arrCalendar[$j][$i]['year']. "-". $arrCalendar[$j][$i]['month']. "-". $arrCalendar[$j][$i]['day'];
					if ($w_day == $chk){
	                    $arrCalendar[$j][$i]['holiday'] = 4;
					}
				}

                ++$i;
            }
        }
        return $arrCalendar;
    }

【カレンダーのブロックテンプレート】
デザイン管理のブロック編集、カレンダーを改変

<!--▼カレンダーここから-->
<h2></h2>
<div id="block-calendar">
<!--{section name=num loop=$arrCalendar}-->
<!--{assign var=arrCal value=`$arrCalendar[num]`}–>
<!–{section name=cnt loop=$arrCal}–>
<!–{if $smarty.section.cnt.first}–>
<table>
<caption><!–{$arrCal[cnt].year}–>年<!–{$arrCal[cnt].month}–>月の定休日</caption>
<thead><tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr></thead>
<!–{/if}–>
<!–{if $arrCal[cnt].first}–>
<tr>
<!–{/if}–>
<!–{if !$arrCal[cnt].in_month}–>
<td></td>
<!–{elseif $arrCal[cnt].holiday == 1}–>
<td class="sun"><!–{$arrCal[cnt].day}–></td>
<!–{elseif $arrCal[cnt].holiday == 2}–>
<td class="sat"><!–{$arrCal[cnt].day}–></td>
<!–{elseif $arrCal[cnt].holiday == 3}–>
<td class="off"><!–{$arrCal[cnt].day}–></td>
<!–{else}–>
<td><!–{$arrCal[cnt].day}–></td>
<!–{/if}–>
<!–{if $arrCal[cnt].last}–>
</tr>
<!–{/if}–>
<!–{/section}–>
<!–{if $smarty.section.cnt.last}–>
</table>
<!–{/if}–>
<!–{/section}–>
</div>
<!–▲カレンダーここまで–>

【設定ファイルを追加】
data/calendar_conf.php

<?php
/*******************************
 ■営業日カレンダー設定ファイル

 Programed at 2008.05.30

 http://www.naviwave.com/
 Kazuhisa Katoh

********************************/

// 毎週○○曜日休みの設定。カンマで区切ってください。
	$cal_holiday = array(3,4); // 0=日曜~ 7=土曜

// 第○▲曜日の設定
// $cal_w_num[第○][曜日0~7]
// 例)$cal_w_num[1][2]; 第1火曜日
// 必要数だけ追加してください
	$cal_w_num[2][2] = true;
	$cal_w_num[4][2] = true;

// 営業日の設定。毎週休みを設定した場合などで、特別に営業する場合など。
// カンマで区切ってください。
	$cal_open = array(
	'2008-6-11',
	'2008-6-25',
	);

?>
※よろしければ投票お願いします。
orz・・・・びみょ~~超普通いいやん?めっちゃいいやん!? 評価:5 (投票回数 1 回)
Loading ... Loading ...

コメント無し (コメントの投稿)



コメントをどうぞ

0ページ中 1ページ