条件に合う記事を元にカレンダーを出力するプラグイン(その2)

昨日の続きで、条件に合う記事を元にカレンダーを出力するプラグインを紹介します。
今日は、日付型のカスタムフィールドの値でブログ記事をまとめて、カレンダーを出力する例を取り上げます。

1.事例

例えば、「イベント日時」というカスタムフィールドを追加しているとします。
また、このカスタムフィールドには、「entry_eventdate」というベースネームを付けているとします。
この状況で、2012年1月~12月のイベント(「イベント日時」フィールドの値が2012年1月1日以上、2013年1月1日未満)の、月ごとのカレンダーを出力したいとします。

2.ブログ記事の検索

まず、SearchEntriesプラグインを使って、2012年1月~12月のイベントを検索します。
この部分のテンプレートを書くと、以下のようになります。

<mt:SearchConditions>
  <mt:SearchConditionCFSection field="entry_eventdate">
    <$mt:SearchConditionCFCompare ge="20120101000000" lt="20130101000000"$>
  </mt:SearchConditionCFSection>
</mt:SearchConditions>

2~4行目のMTSearchConditionCFSectionタグのブロックで、「イベント日時」フィールド(field="entry_eventdate")の値が、2012年1月1日0時0分0秒以上(ge="20120101000000")かつ、2013年1月1日0時0分0秒未満(lt="20120101000000")のブログ記事を検索します。

3.カレンダーの出力

次に、検索したブログ記事を元に、「イベント日時」カスタムフィールドの日付で月ごとにブログ記事をまとめて、カレンダーを出力します。
この部分のテンプレートを書くと、以下のようになります。

<mt:SearchEntriesArchiveList field="field:entry_eventdate">
  <h2><$mt:ArchiveDate format="%Y年%m月"$></h2>
  <table border="1">
    <tr><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th><th>日</th></tr>
    <mt:SearchEntriesCalendar>
      <mt:CalendarWeekHeader><tr></mt:CalendarWeekHeader>
      <td<mt:CalendarIfToday> class="today"</mt:CalendarIfToday>>
        <mt:CalendarIfBlank>&nbsp;</mt:CalendarIfBlank>
        <mt:CalendarIfEntries><mt:Entries lastn="1"><a href="<$mt:EntryPermalink$>"><$mt:CalendarDay$></a></mt:Entries></mt:CalendarIfEntries>
        <mt:CalendarIfNoEntries><$mt:CalendarDay$></mt:CalendarIfNoEntries>
      </td>
      <mt:CalendarWeekFooter></tr></mt:CalendarWeekFooter>
    </mt:SearchEntriesCalendar>
  </table>
</mt:SearchEntriesArchiveList>

上記のテンプレートの内容は、以下の通りです。

1/15行目

MTSearchEntriesArchiveListタグで、「イベント日時」カスタムフィールドの値でブログ記事を月ごとにまとめ、順に出力します。

2行目

MTArchiveDateタグで、個々の月名を出力します。

5/13行目

MTSearchEntriesCalendarタグで、1日ずつ順にカレンダーを出力します。

6行目

週の最初の曜日の時には(MTCalendarWeekHeader)、行の先頭の<tr>タグを出力します。

7行目

個々の日のセルの<td>タグを出力します。
その際に、今日の日付であれば、「class="today"」のクラスを付加します。

8行目

空白のセル(1日の前や、月の最後の日の後)の場合は、空白を出力します。

9行目

イベントがある日(その日のブログ記事がある=MTCalendarIfEntries)の場合は、MTCalendarDayタグでその日付を出力します。また、その日のブログ記事から1件取り出し、その記事へのリンクを出力します。

10行目

イベントがない日(その日のブログ記事がない=MTCalendarIfBlank)の場合は、MTCalendarDayタグで日付だけを出力します。

12行目

週の最後の曜日の時には(MTCalendarWeekFooter)、行の最後の</tr>タグを出力します。