休日表示カレンダーを作る前に、小さなプラグインを書いた。それは、The Neurotic Fishbowl That Is My Life... にある縦縞の入った見やすいカレンダーをどうしても作りたかったからである。
■ ■ ■
Neurotic Fishbowl のように PHP を使っている場合、縞々カレンダーは割と簡単に作れるようだ(scriptygoddess)。PHP を使わない場合は、プラグインを作るしかないらしい。最初に書いたのは次の小さなプラグインだった。
use MT::Template::Context;
MT::Template::Context->add_conditional_tag(CalColIfEven => \&ColEven);
MT::Template::Context->add_conditional_tag(CalColIfOdd => \&ColOdd);
sub ColEven {
my $num = $_[0]->stash('calendar_cell');
return !(($num % 7) % 2 || ($num % 7 == 0));
}
sub ColOdd {
my $num = $_[0]->stash('calendar_cell');
return ($num % 7) % 2 || ($num % 7 == 0);
}
1;
これはカレンダーのセル番号を取得して、カラムが偶数か奇数かで真または偽を返す、条件タグを実装している。これを例えば stripecal.pl という名前で CGIPath/plugins/ ディレクトリに保存する。プラグインの名前は何でもよい。
この条件タグは、Main Index テンプレートの中で次のように使う。
<MTCalColIfEven>bgcolor="#FFFFFF"</MTCalColIfEven>
<MTCalColIfOdd>bgcolor="#F1FFC8"</MTCalColIfOdd>
もし、カレンダーのカラムが偶数だったらbgcolor="#FFFFFF" を表示し、奇数だったら bgcolor="#F1FFC8" を表示することになる。
実際にカレンダーの中に埋め込むと次のようになる。
<MTCalendar>
<MTCalendarWeekHeader><tr></MTCalendarWeekHeader>
<td align="center" <MTCalColIfEven>bgcolor="#FFFFFF"</MTCalColIfEven>
<MTCalColIfOdd>bgcolor="#F1FFC8"</MTCalColIfOdd>>
<span class="calendar">
<MTCalendarIfEntries><MTEntries lastn="1">
<a href="<$MTEntryPermalink$>"><$MTCalendarDay$></a>
</MTEntries></MTCalendarIfEntries>
<MTCalendarIfNoEntries><$MTCalendarDay$></MTCalendarIfNoEntries>
<MTCalendarIfBlank> </MTCalendarIfBlank>
</span>
</td><MTCalendarWeekFooter></tr>
</MTCalendarWeekFooter>
</MTCalendar>
1日につき、プラグインが2回呼ばれている。効率的でないが、私の力不足のため仕方ない。
MovableType は、プラグインが比較的容易に作れるのが魅力である。今回作ってみて分かったのは、
- プラグインのファイル名は何でもよい
- プラグインの中で宣言したタグは、テンプレートから呼び出す場合には先頭に「MT」がつく
- デバッグが難しい
- 不完全なプラグインを plugins ディレクトリに置いておくとビルドできなくなる
- #!/usr/bin/perl で始まる Perl スクリプトを置いておくと大変なことになる
- package 宣言をしないで use vers qw($VERSION); $VERSION=1.0; でバージョンだけ宣言すると MovableType のバージョン <$MTVersion$> が 1.0 を出力してしまう
オライリー出版から MovableType の本が出るらしい。今回参考にしたのは、
MovableType のマニュアルにもプラグインの作成法が載っている。
Posted by n at 2004-03-03 01:18 | Edit | Comments (0) | Trackback(0)