簡単な改造ですので、実装されている方も多いと思いますが、 OpenPNEからの移行する方も多いと思いますので、c_holidayテーブルを拡張する形で進めてみます。
形式は、UNIXのXで動作するカレンダーソフトと同様のフォーマット(.hol)とします。
OpenPNE2.6以降では、カレンダーの祝日表示対応があります。 ただし、OpenPNE祝日対応用のc_holidayテーブルは年項目がありませんので、翌年のカレンダーでも本年の祝日が表示されるというバグがあります。※この既知のバグは、修正要望は多数見ましたが取り入れられないようです。(2.6,2.8,2.10安定版で確認)
/webapp/lib/db/read/etc.php
ファイルの最後に、下記関数を追加。
/**
* カレンダーの祝日を取得する
*/
function db_c_holiday_list4date($y, $m, $d)
{
$sql = 'SELECT name FROM c_holiday WHERE year = ? AND month = ? AND day = ?';
$params = array(intval($y), intval($m), intval($d));
return db_get_col($sql, $params);
}
/webapp/modules/pc/page/h_calendar.php
84行の次に挿入、 c_holiday_list4date($year, $month, $day),
/webapp/modules/pc/page/h_home.php
181行の次に挿入、 'holiday' => db_c_holiday_list4date($y, $m, $d),
/webapp/modules/pc/templates/h_calendar.tpl
86~91行を、下記に置換
({foreach from=$week item=item name=week})
<td style="height:65px;padding:2px;" align="left" valign="top" class="bg_0({if $item.now})9({else})2({/if})({if $smarty.foreach.week.first || $item.holiday}) c_02({elseif $smarty.foreach.week.last}) c_03({/if})">
次に、({* 誕生日 *})ブロックの上部に、 ---> 祝日名表示
({* 祝日 *})
({if $item.holiday})
({foreach from=$item.holiday item=item_holiday})
<span class=" c_02">({$item_holiday})</span><br>
({/foreach})
({/if})
/webapp/modules/pc/templates/new_templates/myschedule.tpl
41行を入替
<td style="width:({if $smarty.foreach.calendar.last})64({else})60({/if})px;({if ! $smarty.foreach.calendar.last})border-right:none;({/if})" align="left" valign="top" class="border_01 bg_0({if $item.now})9({else})2({/if})({if $item.dayofweek == "日" || $item.holiday}) c_02({elseif $item.dayofweek == "土"}) c_03({/if}) padding_s">
48行の次に挿入、
({* 祝日 *})
({foreach from=$item.holiday item=item_holiday})
({$item_holiday})<br>
({/foreach})
CREATE TABLE `c_holiday` ( `c_holiday_id` int(11) NOT NULL auto_increment, `month` int(11) NOT NULL default ‘0’, `day` int(11) NOT NULL default ‘0’, `year` int(11) NOT NULL default ‘0’, `name` text NOT NULL, PRIMARY KEY (`c_holiday_id`) ) TYPE=MyISAM AUTO_INCREMENT=20 ;
INSERT INTO `c_holiday` (`month`, `day`, `year`, `name` ) VALUES (1,1,2001,’元日’), (1,8,2001,’成人の日’), (2,11,2001,’建国記念の日’), (2,12,2001,’振替休日’), (3,20,2001,’春分の日’), (4,29,2001,’みどりの日’), (4,30,2001,’振替休日’), (5,3,2001,’憲法記念日’), (5,4,2001,’国民の休日’), (5,5,2001,’こどもの日’), (7,20,2001,’海の日’), (9,15,2001,’敬老の日’), (9,23,2001,’秋分の日’), (9,24,2001,’振替休日’), (10,8,2001,’体育の日’), (11,3,2001,’文化の日’), (11,23,2001,’勤労感謝の日’), (12,23,2001,’天皇誕生日’), (12,24,2001,’振替休日’), (1,1,2002,’元日’), (1,14,2002,’成人の日’), (2,11,2002,’建国記念の日’), (3,21,2002,’春分の日’), (4,29,2002,’みどりの日’), (5,3,2002,’憲法記念日’), (5,4,2002,’国民の休日’), (5,5,2002,’こどもの日’), (5,6,2002,’振替休日’), (7,20,2002,’海の日’), (9,15,2002,’敬老の日’), (9,16,2002,’振替休日’), (9,23,2002,’秋分の日’), (10,14,2002,’体育の日’), (11,3,2002,’文化の日’), (11,4,2002,’振替休日’), (11,23,2002,’勤労感謝の日’), (12,23,2002,’天皇誕生日’), (1,1,2003,’元日’), (1,13,2003,’成人の日’), (2,11,2003,’建国記念の日’), (3,21,2003,’春分の日’), (4,29,2003,’みどりの日’), (5,3,2003,’憲法記念日’), (#05,04,2003,’国民の休日’), (5,5,2003,’こどもの日’), (7,21,2003,’海の日’), (9,15,2003,’敬老の日’), (9,23,2003,’秋分の日’), (10,13,2003,’体育の日’), (11,3,2003,’文化の日’), (11,23,2003,’勤労感謝の日’), (11,24,2003,’振替休日’), (12,23,2003,’天皇誕生日’), (1,1,2004,’元日’), (1,12,2004,’成人の日’), (2,11,2004,’建国記念の日’), (3,20,2004,’春分の日’), (4,29,2004,’みどりの日’), (5,3,2004,’憲法記念日’), (5,4,2004,’国民の休日’), (5,5,2004,’こどもの日’), (7,19,2004,’海の日’), (9,20,2004,’敬老の日’), (9,23,2004,’秋分の日’), (10,11,2004,’体育の日’), (11,3,2004,’文化の日’), (11,23,2004,’勤労感謝の日’), (12,23,2004,’天皇誕生日’), (1,1,2005,’元日’), (1,10,2005,’成人の日’), (2,11,2005,’建国記念の日’), (3,20,2005,’春分の日’), (3,21,2005,’振替休日’), (4,29,2005,’みどりの日’), (5,3,2005,’憲法記念日’), (5,4,2005,’国民の休日’), (5,5,2005,’こどもの日’), (7,18,2005,’海の日’), (9,19,2005,’敬老の日’), (9,23,2005,’秋分の日’), (10,10,2005,’体育の日’), (11,3,2005,’文化の日’), (11,23,2005,’勤労感謝の日’), (12,23,2005,’天皇誕生日’), (1,1,2006,’元日’), (1,2,2006,’振替休日’), (1,9,2006,’成人の日’), (2,11,2006,’建国記念の日’), (3,21,2006,’春分の日’), (4,29,2006,’みどりの日’), (5,3,2006,’憲法記念日’), (5,4,2006,’国民の休日’), (5,5,2006,’こどもの日’), (7,17,2006,’海の日’), (9,18,2006,’敬老の日’), (9,23,2006,’秋分の日’), (10,9,2006,’体育の日’), (11,3,2006,’文化の日’), (11,23,2006,’勤労感謝の日’), (12,23,2006,’天皇誕生日’), (1,1,2007,’元日’), (1,8,2007,’成人の日’), (2,11,2007,’建国記念の日’), (2,12,2007,’振替休日’), (3,21,2007,’春分の日’), (4,29,2007,’昭和の日’), (4,30,2007,’振替休日’), (5,3,2007,’憲法記念日’), (5,4,2007,’みどりの日’), (5,5,2007,’こどもの日’), (7,16,2007,’海の日’), (9,17,2007,’敬老の日’), (9,23,2007,’秋分の日’), (9,24,2007,’振替休日’), (10,8,2007,’体育の日’), (11,3,2007,’文化の日’), (11,23,2007,’勤労感謝の日’), (12,23,2007,’天皇誕生日’), (12,24,2007,’振替休日’), (1,1,2008,’元日’), (1,14,2008,’成人の日’), (2,11,2008,’建国記念の日’), (3,20,2008,’春分の日’), (4,29,2008,’昭和の日’), (5,3,2008,’憲法記念日’), (5,4,2008,’みどりの日’), (5,5,2008,’こどもの日’), (5,6,2008,’休日’), (7,21,2008,’海の日’), (9,15,2008,’敬老の日’), (9,23,2008,’秋分の日’), (10,13,2008,’体育の日’), (11,3,2008,’文化の日’), (11,23,2008,’勤労感謝の日’), (11,24,2008,’振替休日’), (12,23,2008,’天皇誕生日’), (1,1,2009,’元日’), (1,12,2009,’成人の日’), (2,11,2009,’建国記念の日’), (3,20,2009,’春分の日’), (4,29,2009,’昭和の日’), (5,3,2009,’憲法記念日’), (5,4,2009,’みどりの日’), (5,5,2009,’こどもの日’), (5,6,2009,’振替休日’), (7,20,2009,’海の日’), (9,21,2009,’敬老の日’), (9,22,2009,’国民の休日’), (9,23,2009,’秋分の日’), (10,12,2009,’体育の日’), (11,3,2009,’文化の日’), (11,23,2009,’勤労感謝の日’), (12,23,2009,’天皇誕生日’);