「WordPressで学ぶPHP(3)関数編」を発売しました。
本書は「WordPressで学ぶPHP(1)変数・制御構造編」「WordPressで学ぶPHP(2)データ構造(配列・オブジェクト)編」の続編にあたり、PHP組み込みの関数や、独自の関数を作る方法などを解説します。
Kindle本で、定価400円です。
縦型のカレンダーを出力する
MTQに、「一番左が日付、次が曜日で、その次が内容などの縦型のカレンダーを出力したい」という質問が上がっていました。
この質問に答えます。
1.考え方
Movable Typeでは、カレンダーを出力するにはMTCalendar系のタグを使います。
MTCalendar系のテンプレートタグは、主に横型(7列×4~6行)のカレンダーを出力することを想定しています。
しかし、縦型のカレンダーも出力することができます。
考え方は以下のようになります。
1-1.月初/月末の空のセルをスキップする
横型のカレンダーでは、月初と月末に空のセルができます。
例えば、1日が火曜日で始まる月の場合、1日の前の日曜日と月曜日が空のセルになります。
MTCalendarタグのブロックでは、月初/月末の空のセルも出力されます。
しかし、縦型のカレンダーでは、月初/月末の空のセルは不要です。
空のセルかどうかを判断するには、MTCalendarIfBlankタグを使います。
また、空でないセルを出力したいので、MTCalendarIfBlankタグのブロックの中でMTElseタグを使います。
ここまでの話から、縦型のカレンダーを出力するには、基本的には以下のようにテンプレートを組みます。
<mt:Calendar>
<mt:CalendarIfBlank>
<mt:Else>
それぞれの日の情報を出力する処理
</mt:CalendarIfBlank>
</mt:Calendar>
1-2.それぞれの日の曜日を出力する
横型のカレンダーだと、カレンダーの先頭に曜日を決め打ちで出力することができます。
一方、縦型のカレンダーの場合、曜日は個々の日に応じて出力するので、決め打ちにすることができません。
横型のカレンダーでは、MTCalendarDayタグを使って、個々の日の日付を出力することが一般的です。
しかし、MTCalendarDayタグでは、曜日を出力することができません。
曜日など、個々の日の詳細な情報が必要なときには、MTCalendarDateタグを使います。
MTCalendarDateタグでは、formatモディファイアで出力形式を指定することができます。
「format="%a"」とすることで、個々の日の曜日を出力することができます。
2.テンプレートの組み方の例
縦型のカレンダーを出力する例は、以下のようになります。
11行目で日付(MTCalendarDayタグ)、12行目で曜日(MTCalendarDateタグ)を出力します。
そして、13~19行目で、個々の日の記事一覧を出力します。
<table>
<tr>
<td>日</td>
<td>曜日</td>
<td>記事</td>
</tr>
<mt:Calendar>
<mt:CalendarIfBlank>
<mt:Else>
<tr>
<td><$mt:CalendarDay$></td>
<td><$mt:CalendarDate format="%a"$></td>
<td>
<mt:Entries>
<mt:EntriesHeader><ul></mt:EntriesHeader>
<li><a href="<$mt:EntryPermalink$>"><$mt:EntryTitle$></a></li>
<mt:EntriesFooter></ul></mt:EntriesFooter>
</mt:Entries>
</td>
</tr>
</mt:CalendarIfBlank>
</mt:Calendar>
</table>
