テンプレートの種類を判断するプラグイン

Movable Typeでは、テンプレートモジュールを使うと、複数のテンプレートの共通部分を一箇所にまとめることができます。
そして、MTIncludeタグを使うことで、テンプレートモジュールを他のテンプレートに組み込むことができます。

日別/月別/カテゴリーの各アーカイブテンプレートは、内容がかなり似通っています。
そこで、テンプレート全体をテンプレートモジュール化して、アーカイブごとに違うところを条件判断で処理を分けるようにすれば、これらのテンプレートをかなり共通化することができます。
そのようなことをするために、テンプレートの種類を判断するプラグインを作成しました。

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

以下のアドレスにアクセスすると、プラグインのソースコードをダウンロードすることができます。
ファイルには「IfTemplateType.pl」という名前をつけて保存します。

IfTemplateType.pl

プラグインの継続的な開発やサポートのために、プラグインをご利用された方は、ドネーション(寄付)を行っていただけると幸いです。
ドネーションの方法は、こちらのページをご参照ください。

また、このプラグインの他にも、いくつかのプラグインを配布しています。
配布中のプラグインは、Movable Type Plugin Directoryのページをご参照ください。

Movable Typeのプラグイン開発等のドキュメント「Movable Type Developer's Guide Volume 1」も販売しています。
ご自分でプラグインを作ってみたい方に、ぜひお勧めしたい一冊です。
詳細は特設ページをご覧ください。

ダウンロードが終わったら、そのファイルをMovable Typeの「plugins」ディレクトリにアップロードします。

2.追加されるタグ

このプラグインをインストールすると、「MTIfTemplateType」という条件タグが追加されます。
「type」というアトリビュートを使って、テンプレートの種類を判断します。指定できる値は以下の通りです。

内容
Indexインデックステンプレートかどうかを判断する
Categoryカテゴリーアーカイブテンプレートかどうかを判断する
Monthly月別アーカイブテンプレートかどうかを判断する
Weekly週別アーカイブテンプレートかどうかを判断する
Daily日別アーカイブテンプレートかどうかを判断する
Individualエントリーアーカイブテンプレートかどうかを判断する

3.利用例

例えば、テンプレートモジュールを1つ作り、以下のようにタグを組むとします。

<MTIfTemplateType type="Index">
インデックステンプレートです。
</MTIfTemplateType>
<MTIfTemplateType type="Category">
カテゴリーアーカイブテンプレートです。
</MTIfTemplateType>

このテンプレートモジュールをインデックステンプレートに組み込むと、組み込んだ位置に「インデックステンプレートです。」と表示されます。
また、カテゴリーアーカイブテンプレートに組み込むと、その位置に「カテゴリーアーカイブテンプレートです。」と表示されます。
そして、それ以外のテンプレートでは、何も表示されません。

4.複数種類のテンプレートで共通の処理をしたい場合

「日別と月別のテンプレートでは前後のアーカイブページへのリンクを表示し、それ以外ではリンクは表示しない」というような場合、「日別」と「月別」のどちらかかどうかを判断して、処理を分ければ良いことになります。

そこで、複数種類のテンプレートのどれかに該当するかを判断することもできます。
それには、typeアトリビュートにテンプレートの種類を指定する際に、コンマで区切ってテンプレートの種類を並べます。

例えば、以下のようなテンプレートモジュールを作り、それぞれのテンプレートに組み込むと、月別または日別アーカイブテンプレートの場合のみ、前後のアーカイブページへのリンクが出力されます。それ以外のテンプレートでは何も表示されません。

<MTIfTemplateType type="Monthly,Daily">
<MTArchivePrevious>
<a href="<$MTArchiveLink$>">&lt;&lt; <$MTArchiveTitle$></a> |
</MTArchivePrevious>
<a href="<$MTBlogURL$>">Main</a>
<MTArchiveNext>
| <a href="<$MTArchiveLink$>"><$MTArchiveTitle$> &gt;&gt;</a>
</MTArchiveNext>
</MTIfTemplateType>