~ To be, or not to be, or to think about it tomorrow. ~ null-i.net |
PukiWiki/カレンダーに祝日を入れる | ||||||||||||||||||||||||||||||||||||||||||||||||||
祝日付きカレンダー(2022-09-08) Pukiwiki の plugin/calendar.inc.phpに手を加えて祝日を赤字で表示します。 あと、プレミアムフライデーも表示します。 #calendar1b (←作り方は後述) を埋め込むと以下が表示されます。
新しい方のカレンダー関数を使わずにあえて古い plugin/calendar.inc.php がベースなのは、単にリンクとかの機能は不要だったからです。 手順†plugin/calendar.inc.php をコピーして calendar1b を作成します。 $ cp -pi plugin/calendar.inc.php plugin/calendar1b.inc.php そして変更後のファイルに diff を取った結果が以下 --- plugin/calendar.inc.php 2020-03-05 00:51:13.000000000 +0900 +++ plugin/calendar1b.inc.php 2022-03-10 12:50:58.237577670 +0900 @@ -8,8 +8,45 @@ // // Calendar plugin -function plugin_calendar_convert() +function plugin_calendar1b_convert() { + +$hol_days = array( +'2022-1-1' => '元旦', +'2022-1-10'=> '成人の日', +'2022-2-11'=> '建国記念の日', +'2022-2-23'=> '天皇誕生日', +'2022-3-21'=> '春分の日', +'2022-4-29'=> '昭和の日', +'2022-5-3' => '憲法記念日', +'2022-5-4' => 'みどりの日', +'2022-5-5' => 'こどもの日', +'2022-7-18'=> '海の日', +'2022-8-11'=> '山の日', +'2022-9-19'=> '敬老の日', +'2022-9-23'=> '秋分の日', +'2022-10-10'=>'スポーツの日', +'2022-11-3' =>'文化の日', +'2022-11-23'=>'勤労感謝の日', +'2023-1-1' =>'元旦', // Fix +'2023-1-2' =>'振替休日', +'2023-1-9' =>'成人の日', +'2023-2-11' =>'建国記念の日',// Fix +'2023-2-23' =>'天皇誕生日', +'2023-3-21' =>'春分の日', +'2023-4-29' =>'昭和の日', +'2023-5-3' =>'憲法記念日', // Fix +'2023-5-4' =>'みどりの日', // Fix +'2023-5-5' =>'こどもの日', // Fix +'2023-7-17' =>'海の日', +'2023-8-11' =>'山の日', // Fix +'2023-9-18' =>'敬老の日', +'2023-9-23' =>'秋分の日', +'2023-10-9' =>'スポーツの日', +'2023-11-3' =>'文化の日', // Fix +'2023-11-23'=>'勤労感謝の日',// Fix +'1999-3-10' =>'テスト' +); global $weeklabels, $vars, $command; $script = get_base_uri(); @@ -68,7 +105,24 @@ $wday = $f_today['wday']; $day = 1; - $m_name = $year . '.' . $m_num . ' (' . $cmd . ')'; + // calendar1b: + //$m_name = $year . '.' . $m_num . ' (' . $cmd . ')'; + $r_year = intval($year) - 2018; + switch($m_num){ + case 1: $m_text = "睦月"; break; + case 2: $m_text = "如月"; break; + case 3: $m_text = "弥生"; break; + case 4: $m_text = "卯月"; break; + case 5: $m_text = "皐月"; break; + case 6: $m_text = "水無月"; break; + case 7: $m_text = "文月"; break; + case 8: $m_text = "葉月"; break; + case 9: $m_text = "長月"; break; + case 10: $m_text = "神無月"; break; + case 11: $m_text = "霜月"; break; + default: $m_text = "師走"; break; + } + $m_name = $year . '.' . $m_num . sprintf(' (令和%d年 %s)', $r_year, $m_text); $pre = strip_bracket($pre); $page_uri = get_page_uri($pre); @@ -78,7 +132,6 @@ <tr> <td class="style_td_caltop" colspan="7"> <strong>$m_name</strong><br /> - [<a href="$page_uri">$pre</a>] </td> </tr> <tr> @@ -95,6 +148,11 @@ for ($i = 0; $i < $wday; $i++) $ret .= ' <td class="style_td_blank"> </td>' . "\n"; + // calendar1b: get final day, and search final friday. + $final_day = intval((new DateTimeImmutable)->modify(sprintf('last day of %04d-%02d', $year, $m_num))->format('d')); + $is_premium_friday = 0; + $hol_detail = ""; + while(checkdate($m_num, $day, $year)) { $dt = sprintf('%04d%02d%02d', $year, $m_num, $day); $name = $prefix . $dt; @@ -103,8 +161,26 @@ $refer = ($cmd == 'edit') ? '&refer=' . rawurlencode($page) : ''; + $is_last_fri = 0; + if ($wday == 5 && $day > $final_day - 7) { + // calendar1b: premium Fri! + $is_last_fri = 1; + if($day == $today['mday']) { + $is_premium_friday = 1; + } + } if ($cmd == 'read' && ! is_page($name)) { - $link = '<strong>' . $day . '</strong>'; + // calendar1b: holiday or premium day + $hol_key = sprintf("%d-%d-%d", $year, $m_num, $day); + if(array_key_exists($hol_key, $hol_days)){ + $link = '<strong><font color="#ff0066">' . $day . '</font></strong>'; + if($day == $today['mday']){ + $hol_detail = $hol_days[$hol_key]; + } + } else { + $link = '<strong>' . ($is_last_fri > 0 ? 'P' : $day) . '</strong>'; + //$link = '<strong>' . ($is_last_fri > 0 ? '<img src=image/face/smile.png />' : $day) . '</strong>'; + } } else { $link = '<a href="' . $script . '?cmd=' . $cmd . '&page=' . $r_page . $refer . '" title="' . @@ -149,5 +225,13 @@ $ret .= ' </tr>' . "\n" . '</table>' . "\n"; + // calendar1b: + if($is_premium_friday > 0){ + $ret .= ' <b><font color="red">プレミアムフライデー!</font></b><br />' . "\n"; + } + else if(strlen($hol_detail)){ + $ret .= ' <b><font color="red">' . $hol_detail . '</font></b><br />' . "\n"; + } + return $ret; } これをコピーした calendar1b.inc.php に対して patch -u コマンドで適用してください。 プレミアムフライデー(=最終週の金曜日)の特定方法†月の日数も曜日の位置も変わるから難しい…と最初は思っていたのですが、ふと気づけば「最後の7日以内、かつ、金曜日」の日付が最終金曜日になります。 |
|
|||||||||||||||||||||||||||||||||||||||||||||||||