印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
MovableTypePlugin しましまカレンダー試作

休日表示カレンダーを作る前に、小さなプラグインを書いた。それは、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>&nbsp;</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)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?