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', ); ?>


