function get_mini_calendar_html($get_target = '', $query_string = '', $mode = '') { // 実行時間計測スタート // list( $usec , $sec ) = explode( " " , microtime() ) ; // $picalstarttime = $sec + $usec ; // $PHP_SELF = $_SERVER['SCRIPT_NAME'] ; // if( $get_target == '' ) $get_target = $PHP_SELF ; $original_level = error_reporting(E_ALL ^ E_NOTICE); require_once "{$this->base_path}/include/patTemplate.php"; $tmpl = new PatTemplate(); $tmpl->setBasedir("{$this->images_path}"); // 表示モードに応じて、テンプレートファイルを振り分け switch ($mode) { case 'NO_YEAR': // 年間表示用 $tmpl->readTemplatesFromFile("minical_for_yearly.tmpl.html"); $target_highlight_flag = false; break; case 'NO_NAVIGATE': // 月間の下部参照用 $tmpl->readTemplatesFromFile("minical_for_monthly.tmpl.html"); $target_highlight_flag = false; break; default: // 通常のミニカレンダーブロック用 $tmpl->readTemplatesFromFile("minical.tmpl.html"); $target_highlight_flag = true; break; } // 当月の各日がイベントを持っているかどうかを取得 $event_dates = $this->get_flags_date_has_events(mktime(0, 0, 0, $this->month, 1, $this->year), mktime(0, 0, 0, $this->month + 1, 1, $this->year)); // 前月は月末、翌月は月初とする $prev_month = date("Y-n-j", mktime(0, 0, 0, $this->month, 0, $this->year)); $next_month = date("Y-n-j", mktime(0, 0, 0, $this->month + 1, 1, $this->year)); // $tmpl->addVar( "WholeBoard" , "PHP_SELF" , '' ) ; $tmpl->addVar("WholeBoard", "GET_TARGET", $get_target); $tmpl->addVar("WholeBoard", "QUERY_STRING", $query_string); $tmpl->addVar("WholeBoard", "MB_PREV_MONTH", _PICAL_MB_PREV_MONTH); $tmpl->addVar("WholeBoard", "MB_NEXT_MONTH", _PICAL_MB_NEXT_MONTH); $tmpl->addVar("WholeBoard", "MB_LINKTODAY", _PICAL_MB_LINKTODAY); $tmpl->addVar("WholeBoard", "SKINPATH", $this->images_url); $tmpl->addVar("WholeBoard", "FRAME_CSS", $this->frame_css); // $tmpl->addVar( "WholeBoard" , "YEAR" , $this->year ) ; // $tmpl->addVar( "WholeBoard" , "MONTH" , $this->month ) ; $tmpl->addVar("WholeBoard", "MONTH_NAME", $this->month_middle_names[$this->month]); $tmpl->addVar("WholeBoard", "YEAR_MONTH_TITLE", sprintf(_PICAL_FMT_YEAR_MONTH, $this->year, $this->month_middle_names[$this->month])); $tmpl->addVar("WholeBoard", "PREV_MONTH", $prev_month); $tmpl->addVar("WholeBoard", "NEXT_MONTH", $next_month); $tmpl->addVar("WholeBoard", "CALHEAD_BGCOLOR", $this->calhead_bgcolor); $tmpl->addVar("WholeBoard", "CALHEAD_COLOR", $this->calhead_color); $first_date = getdate(mktime(0, 0, 0, $this->month, 1, $this->year)); $date = (-$first_date['wday'] + $this->week_start - 7) % 7; $wday_end = 7 + $this->week_start; // 曜日名ループ $rows = array(); for ($wday = $this->week_start; $wday < $wday_end; $wday++) { if ($wday % 7 == 0) { // Sunday $bgcolor = $this->sunday_bgcolor; $color = $this->sunday_color; } elseif ($wday == 6) { // Saturday $bgcolor = $this->saturday_bgcolor; $color = $this->saturday_color; } else { // Weekday $bgcolor = $this->weekday_bgcolor; $color = $this->weekday_color; } // テンプレート用配列へのデータセット array_push($rows, array("BGCOLOR" => $bgcolor, "COLOR" => $color, "DAYNAME" => $this->week_short_names[$wday % 7])); } // テンプレートにデータを埋め込む $tmpl->addRows("DayNameLoop", $rows); $tmpl->parseTemplate("DayNameLoop", 'w'); // 週 (row) ループ for ($week = 0; $week < 6; $week++) { $rows = array(); // 日 (col) ループ for ($wday = $this->week_start; $wday < $wday_end; $wday++) { $date++; if (!checkdate($this->month, $date, $this->year)) { // 月の範囲外 array_push($rows, array("GET_TARGET" => $get_target, "QUERY_STRING" => $query_string, "SKINPATH" => $this->images_url, "DATE" => date('j', mktime(0, 0, 0, $this->month, $date, $this->year)), "DATE_TYPE" => 0)); continue; } $link = "{$this->year}-{$this->month}-{$date}"; // 曜日タイプによる描画色振り分け if (isset($this->holidays[$link])) { // Holiday $bgcolor = $this->holiday_bgcolor; $color = $this->holiday_color; } elseif ($wday % 7 == 0) { // Sunday $bgcolor = $this->sunday_bgcolor; $color = $this->sunday_color; } elseif ($wday == 6) { // Saturday $bgcolor = $this->saturday_bgcolor; $color = $this->saturday_color; } else { // Weekday $bgcolor = $this->weekday_bgcolor; $color = $this->weekday_color; } // 選択日の背景色ハイライト処理 if ($date == $this->date && $target_highlight_flag) { $bgcolor = $this->targetday_bgcolor; } // テンプレート用配列へのデータセット array_push($rows, array("GET_TARGET" => $get_target, "QUERY_STRING" => $query_string, "BGCOLOR" => $bgcolor, "COLOR" => $color, "LINK" => $link, "DATE" => $date, "DATE_TYPE" => $event_dates[$date] + 1)); } // テンプレートにデータを埋め込む $tmpl->addRows("DailyLoop", $rows); $tmpl->parseTemplate("DailyLoop", 'w'); $tmpl->parseTemplate("WeekLoop", 'a'); } $ret = $tmpl->getParsedTemplate(); error_reporting($original_level); // 実行時間記録 // list( $usec , $sec ) = explode( " " , microtime() ) ; // error_log( "MiniCalendar " . ( $sec + $usec - $picalstarttime ) . "sec." , 0 ) ; return $ret; }