待ちきれない人(!)や、ちょっと無理矢理でも良いというのであればお試しください。
無理矢理というのは、スキーマ定義や入力データにちょっと手を加えねばならない点です。
それから、PEAR Calendar モジュールが必要な方法ですので、使えない方にはごめんなさい。
PEAR Calendar モジュールはインストール済みの前提です。
インストール方法は環境によって違うとも聞きますので、説明は省きます。
PEAR ディレクトリに以下の2つがインストールされていることを確認してください。
Calendar/Month/Weekdays.php
Calendar/Decorator.php
誕生日にその人の名前を表示する、というシンプルなカレンダーを作ります。
一月分表示の、一行一週間の、テーブル表示のカレンダーです。
スキーマ定義(長くなりますが、コピペで使えるよう敢えて省略しないでおきます)
コード: 全て選択
<data name="name" type="text" output="html2(他でも良いよ)" caption="名前" size="80" />
<data name="month" type="menu" caption="月" group="True">
<menuitem id="1">1</menuitem>
<menuitem id="2">2</menuitem>
<menuitem id="3">3</menuitem>
<menuitem id="4">4</menuitem>
<menuitem id="5">5</menuitem>
<menuitem id="6">6</menuitem>
<menuitem id="7">7</menuitem>
<menuitem id="8">8</menuitem>
<menuitem id="9">9</menuitem>
<menuitem id="10">10</menuitem>
<menuitem id="11">11</menuitem>
<menuitem id="12">12</menuitem>
</data>
<data name="day" type="menu" caption="日" group="True">
<menuitem id="1">1</menuitem>
<menuitem id="2">2</menuitem>
<menuitem id="3">3</menuitem>
<menuitem id="4">4</menuitem>
<menuitem id="5">5</menuitem>
<menuitem id="6">6</menuitem>
<menuitem id="7">7</menuitem>
<menuitem id="8">8</menuitem>
<menuitem id="9">9</menuitem>
<menuitem id="10">10</menuitem>
<menuitem id="11">11</menuitem>
<menuitem id="12">12</menuitem>
<menuitem id="13">13</menuitem>
<menuitem id="14">14</menuitem>
<menuitem id="15">15</menuitem>
<menuitem id="16">16</menuitem>
<menuitem id="17">17</menuitem>
<menuitem id="18">18</menuitem>
<menuitem id="19">19</menuitem>
<menuitem id="20">20</menuitem>
<menuitem id="21">21</menuitem>
<menuitem id="22">22</menuitem>
<menuitem id="23">23</menuitem>
<menuitem id="24">24</menuitem>
<menuitem id="25">25</menuitem>
<menuitem id="26">26</menuitem>
<menuitem id="27">27</menuitem>
<menuitem id="28">28</menuitem>
<menuitem id="29">29</menuitem>
<menuitem id="30">30</menuitem>
<menuitem id="31">31</menuitem>
</data>
date 項目ですと、「1981-09-20」という文字列ごとグループキーに設定されるので、
月と日で切り分けて絞り込むことができません。(カレンダー機能搭載の際には、この部分の切り分けが可能になるのでしょう、たぶん)
デザイン定義はどうということはありません。
同じ誕生日の人がいる可能性がありますから、一覧表示用で作ります。
コード: 全て選択
<xsl:template match="/entrylist ">
<xsl:for-each select="entry">
<div>
<xsl:value-of select="name" disable-output-escaping="yes" />
</div>
</xsl:for-each>
</xsl:template>
コード: 全て選択
<?php
//PEAR include
require_once("Calendar/Month/Weekdays.php");
require_once("Calendar/Decorator.php");
class MonthDecorator extends Calendar_Decorator {
function MonthDecorator(& $Month) {
parent::Calendar_Decorator($Month);
}
function prevMonth() {
$prevStamp = parent::prevMonth(TRUE);
return $_SERVER['PHP_SELF'].'?y='.date('Y',$prevStamp).
'&m='.date('n',$prevStamp).'&d='.date('j',$prevStamp);
}
function thisMonth() {
$thisStamp = parent::thisMonth(TRUE);
return date("Y年 m月",$thisStamp);
}
function nextMonth() {
$nextStamp = parent::nextMonth(TRUE);
return $_SERVER['PHP_SELF'].'?y='.date('Y',$nextStamp).
'&m='.date('n',$nextStamp).'&d='.date('j',$nextStamp);
}
}
if (!isset($_GET['y'])) $_GET['y'] = date('Y');
if (!isset($_GET['m'])) $_GET['m'] = date('n');
$Month = new Calendar_Month_Weekdays($_GET['y'],$_GET['m'],0);
$MonthDecorator = new MonthDecorator($Month);
$MonthDecorator->build();
?>
コード: 全て選択
<?php require_once( "cmsdesigner/include/view.php.inc" ); // encoding="euc-jp" ?>
コード: 全て選択
<?php include_once("./include/calendar.inc"); ?>
コード: 全て選択
<table class="calendar">
<caption>
<div>
<?php echo ( $MonthDecorator->thisMonth() ); ?>
<span style="color: #ff69b4;">おたんじょうび おめでとう!</span>
</div>
<div>
<a href="<?php echo ($MonthDecorator->prevMonth()); ?>" title="前月">前月</a>
<a href="calendar.php" title="今月">今月</a>
<a href="<?php echo ($MonthDecorator->nextMonth()); ?>" title="次月">次月</a>
</div>
</caption>
<tr>
<th class="Sun">日</th>
<th>月</th>
<th>火</th>
<th>水</th>
<th>木</th>
<th>金</th>
<th class="Sat">土</th>
</tr>
<?php
while ( $Day = $MonthDecorator->fetch() ) {
if ( $Day->isFirst() ) {
echo ( "<tr>\n" );
}
if ( $Day->isEmpty() ) {
echo ( "<td> </td>\n" );
}
else {
if (date("d") == $Day->thisDay()) { // 今日
echo ( "<td class=\"Today\">\n" );
} else {
echo ( "<td>\n" );
}
if ($Day->isFirst()) { // 日曜
echo '<div class="Sun">';
} else if ($Day->isLast()) { // 土曜
echo '<div class="Sat">';
} else {
echo ( "<div>\n" );
}
echo ( $Day->thisDay() );
echo ( "</div>\n" );
?>
<cmsd:entrylist name="calendar" design="default" rows="99" >
<cmsd:group key="month" value="<?php echo $Day->thisMonth(); ?>" />
<cmsd:group key="day" value="<?php echo $Day->thisDay(); ?>" />
</cmsd:entrylist>
<?php
echo ( "</td>\n" );
}
if ( $Day->isLast() ) {
echo ( "</tr>\n" );
}
}
?>
</table>
念のため、最初は CMSD の埋め込みタグをコメントアウトするなりして、
カレンダーそのものの動作を確認してみてください。
ソースを見てもらえばわかりますが、土日と今日の日付の表示を変えることが可能になってます。
CSS で自由にデザインしてください。