先日、あるお客様で、MTのテンプレートの中で「2008年の2月は何日あるか?というように、ある月の日数を知りたい」という方がいらっしゃいました。日数を知りたい月と年を指定すると、日数を返すテンプレートタグをプラグインとして作成しようかと考えていたところ、「できれば'MT標準の機能だけでやりたい」とおっしゃられるので、ちょっと考えてみたのが、以下のテンプレートです。
<MTSetVarTemplate name="days_in_month">
<MTIf name="year">
<MTIf name="month">
<MTSetVar name="daysin[1]" value="31">
<MTSetVar name="daysin[2]" value="28">
<MTSetVar name="daysin[3]" value="31">
<MTSetVar name="daysin[4]" value="30">
<MTSetVar name="daysin[5]" value="31">
<MTSetVar name="daysin[6]" value="30">
<MTSetVar name="daysin[7]" value="31">
<MTSetVar name="daysin[8]" value="31">
<MTSetVar name="daysin[9]" value="30">
<MTSetVar name="daysin[10]" value="31">
<MTSetVar name="daysin[11]" value="30">
<MTSetVar name="daysin[12]" value="31">
<MTSetVarBlock name="days"><MTGetVar name="daysin" index="$month"></MTSetVarBlock>
<MTIf name="year" op="%" value="4" eq="0">
<MTIf name="year" op="%" value="100">
<MTSetVar name="leap_year" value="1">
</MTIf>
<MTElseIf name="year" op="%" eq="0">
<MTSetVar name="leap_year" value="1">
</MTIf>
<MTIf name="month" eq="2">
<MTIf name="leap_year">
<MTSetVar name="days" value="29">
</MTIf>
</MTIf>
<MTGetVar name="days">
</MTIf>
</MTIf>
</MTSetVarTemplate>
上記テンプレートをテンプレートモジュールとして別途保存しておき、使いたいところで呼び出すか、使いたいテンプレートに貼付けておきます。
テンプレート変数として使用している、"days", "month", "year"等は同じ名称の変数が既に使われている可能性がありますが、その場合は、適当に変更してください。
2008年の各月の日数を求める例は、以下のようになります。
<h1>月の日数</h1>
<MTSetVar name="year" value="2008">
<ul>
<MTFor var="month" from="1" to="12">
<li>
<MTGetVar name="year">年<MTGetVar name="month">月は、
<MTGetVar name="days_in_month" strip_linefeeds="1" trim="1">日まであります。
</li>
</MTFor>
</ul>
これは、次のように表示されます。
・2008年1月は、 31日まであります。 ・2008年2月は、 29日まであります。 ・2008年3月は、 31日まであります。 ・2008年4月は、 30日まであります。 ・2008年5月は、 31日まであります。 ・2008年6月は、 30日まであります。 ・2008年7月は、 31日まであります。 ・2008年8月は、 31日まであります。 ・2008年9月は、 30日まであります。 ・2008年10月は、 31日まであります。 ・2008年11月は、 30日まであります。 ・2008年12月は、 31日まであります。
このテンプレートは、これを使って作成したページ自体がボツになってしまったので、実際に使われることはなかったのですが、せっかくですので、ここでネタとして公開することにしました。
ほとんど実用的な使い道は思いつきませんが、MTCalendarタグを使わずにカレンダーを表示することに挑戦してみるのも楽しいかもしれません。