PlainCalendarプラグイン

Movable Type Advent Calendarの7日目として、カレンダーにちなんだ「PlainCalendar」というプラグインを公開します。

1.PlainCalendarプラグインのインストール

PlainCalendarプラグインは、ただカレンダーを出力するだけのプラグインです。
カレンダーに出力する内容を、配列やハッシュで用意することを想定しています。

プラグインは以下からダウンロードします。

PlainCalendar_1_00.zip

ダウンロードしたZipファイルを解凍すると、「plugins」ディレクトリができます。
このディレクトリを、Movable Typeのインストール先ディレクトリにアップロードします。

2.追加されるテンプレートタグ

このプラグインをインストールすると、以下のテンプレートタグが追加されます。

2-1.MTPlainCalendarタグ

カレンダーを出力するブロックタグです。
モディファイアを指定しない場合、テンプレートを再構築した日を含む月のカレンダーを出力します。
以下のモディファイアで、他の月のカレンダーを出力することもできます。

モディファイア出力するカレンダー
month="last"先月のカレンダー
month="next"来月のカレンダー
month="this"月別アーカイブテンプレート内で使う場合は、それぞれの月のカレンダー
ブログ記事アーカイブテンプレート内で使う場合は、個々のブログ記事の月のカレンダー
month="yyyymm"yyyy年mm月のカレンダー
例:「month="201301"」と指定すると、2013年1月のカレンダーを出力

また、「weeks_start_with="mon"」のモディファイアで、月曜始まりのカレンダーを出力することもできます。
weeks_start_withモディファイアには、「mon」の他に、他の曜日(「sun」~「sat」)を指定することもできます。

MTPlainCalendarタグのブロック内では、MTCalendarタグと同様に、以下のテンプレートタグを使うことができます。

ただし、MTCalendarIfEntries/MTCalendarIfNoEntriesタグは使うことができません。

2-2.MTCalendarIfDayタグ

MTCalendarIfDayタグは、MTCalendarIfBlankタグの逆で、日付のセルかどうかを判断するブロックタグです。

3.事例

PlainCalendarプラグインを使った例として、「今月アップロードした画像のカレンダー」を作ってみます。
テンプレートは以下のようになります。

<$mt:Date format="%m" setvar="m"$>
<$mt:Date format="%d" setvar="d"$>
<mt:Assets type="image" days="$d">
  <mt:If tag="AssetDateAdded" format="%m" eq="$m">
    <mt:SetVarBlock name="array_name">array<$mt:AssetDateAdded format="%d"></mt:SetVarBlock>
    <mt:SetVarBlock name="$array_name" function="push">
      <$mt:AssetThumbnailLink width="70" square="1"$>
    </mt:SetVarBlock>
  </mt:If>
</mt:Assets>
<table>
<tr><th>日</th><th>月</th><th>火</th><th>水</th><th>木</th><th>金</th><th>土</th></tr>
<mt:PlainCalendar>
  <mt:CalendarWeekHeader><tr></mt:CalendarWeekHeader>
  <mt:CalendarIfDay>
    <td>
      <div>
      <mt:CalendarIfToday>
        <b><$mt:CalendarDay$></b>
      <mt:Else>
        <$mt:CalendarDay$>
      </mt:CalendarIfToday>
      </div>
      <mt:SetVarBlock name="array_name">array<$mt:CalendarDate format="%d"></mt:SetVarBlock>
      <mt:If name="$array_name">
        <ul>
        <mt:Loop name="$array_name">
          <li><$mt:GetVar name="__value__"$></li>
        </mt:Loop>
        </ul>
      </mt:If>
    </td>
  <mt:Else>
    <td>&nbsp;</td>
  </mt:CalendarIfDay>
  <mt:CalendarWeekFooter></tr></mt:CalendarWeekFooter>
</mt:PlainCalendar>
</table>

前半(MTAssetsタグのブロック)は、今月アップロードした画像を、日毎に「array01」「array02」・・・の配列に格納する処理です。
5行目のMTSetVarBlockタグで、変数array_nameに「array○○」(「○○」は画像をアップロードした日)を求めます。
そして、6~8行目で、その配列の最後に画像を追加(push)します。

後半は、MTPlainCalendarタグを使って、それぞれの日の画像の情報を順に出力する処理です。
MTPlainCalendarタグのブロックを使い、日付を順に出力し(18~22行目)、その日の配列に画像があれば(25行目のMTIfタグ)、配列の要素を順に出力します。