年間カレンダー

クラスを使いまわし、年間のカレンダーを作成してみよう。

カレンダー4で作成したクラスを外部ファイル化し、プログラムを見やすくした。

また、月カレンダー作成のmakeCalenderを12月分実行してSmartyにassignしている。
テンプレートでは、この情報を使って、一画面に12月分の月カレンダーを作成する。

assign( ‘week’, $calendar->getWeekString() );

$disp_date = ”;
//表示日付のセット
if( isset($_REQUEST[‘disp_date’]) && strlen($_REQUEST[‘disp_date’]) ){
$disp_date = $_REQUEST[‘disp_date’];
} else {
$disp_date = date(‘Y/m/d’);
}

$year = date( ‘Y’, strtotime($disp_date) );
$month = date( ‘m’, strtotime($disp_date) );
$day = date( ‘d’, strtotime($disp_date) );

$smarty->assign( ‘disp_year’, $year );
$smarty->assign( ‘disp_month’, $month );
$smarty->assign( ‘disp_day’, $day );

$smarty->assign( ‘now_year’, date(‘Y’) );
$smarty->assign( ‘now_month’, date(‘m’) );
$smarty->assign( ‘now_day’, date(‘d’) );

//前年リンク
$smarty->assign( ‘prev_year’, $year – 1 );
//翌年リンク
$smarty->assign( ‘next_year’, $year + 1 );

$cal_month = array();
for( $n = 1; $n <= 12; $n ++ ){ //処理月 $month = $n; //処理日 $trg_date = "{$year}/{$month}/1"; $data = $calendar->makeCalendar( $trg_date );

$cal_month[$month] = $data;
}

$smarty->assign( ‘cal_month’, $cal_month );

$smarty->display( ‘smarty01/lesson07.tpl’);

テンプレートは下記の通り

<html>
<head>
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
<title>年間のカレンダー表示</title>

</head>
<body>
<div style=”text-align:center;padding:3px;margin-bottom:5px;”>
<table>
<tr>
<td><a href=”./lesson07.php?disp_date={$prev_year}/1/1″>前の年</a></td>
<td align=”center” width=”200″> {$disp_year}年 カレンダー<br/><a href=”./lesson07.php?disp_date={$now_year}/{$now_month}/{$now_day}”>今日</a> </td>
<td><a href=”./lesson07.php?disp_date={$next_year}/1/1″>次の年</a></td>
</tr>
</table>
</div>
<div style=”text-align:center;”>
{foreach from=$cal_month item=month_date key=mon}
<table border=”1″ align=”left” style=”margin-right:10px;”>
<tr>
<td colspan=”7″ align=”center”>{$mon}月</td>
</tr>
<tr>
{foreach from=$week item=node}<th style=”{if $node == ‘日’}background-color:#FFAFAF;{elseif $node == ‘土’}background-color:#AFCFFF;{else}background-color:#A0FFA0;{/if}padding:3px;”>{$node}</th>{/foreach}
</tr>
{foreach from=$month_date[‘disp_month’][‘dates’] item=weeks}
<tr>
{foreach from=$weeks item=node key=w}<td style=”text-align:center;padding:3px;{if $now_year == $month_date[‘disp_month’][‘year’] && $now_month == $month_date[‘disp_month’][‘month’] && $node == $now_day}color:white;background-color:blue;{elseif $w == 0}background-color:#FFAFAF;{elseif $w == 6}background-color:#AFCFFF;{/if}”>{$node}</td>{/foreach}
</tr>
{/foreach}
</table>
{if $mon == 6 }
<div style=”clear:both”></div>
<hr/>
</div>
<div style=”text-align:center;margin-top:10px;”>
{/if}
{/foreach}
</div>
</body>
</html>

作成例はこちら

このようにクラスを再利用して、機能拡張を行っていけば少ない改修労力でサービスの機能拡張を用意に行っていくことだ出来る。
クラスの機能を上手く使っいこなしていくことが必要だ。