お知らせ

Movable Type プロフェッショナル・スタイル MT4.1対応 2008年4月8日

Movable Typeプロフェッショナル・スタイル」が発売されました。
Movable Typeの第一線に関わる人々の共著で、Movable Typeをビジネスサイト構築に活かすテクニックが満載です。
Movable Typeでサイト構築を行っているWeb制作会社等の方々にお勧めです。

他にも多数書籍を執筆しています。
こちらもぜひご覧ください。

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

| コメント(6) | トラックバック(2)

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

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

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

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

IfTemplateType.pl

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

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

ダウンロードが終わったら、そのファイルを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>

トラックバック(2)

トラックバックURL: http://www.h-fj.com/mt/mt-tb.cgi/428.

オラオラ:BlogTimesのインストール インデックスぶち壊れ事件の顛末は後... 続きを読む

Movable Type 3.3ですが、個人的には面白かったので良かったと思って... 続きを読む

コメント(スレッド6件,コメント6件)

コメントはスレッド表示になっています。
また、スレッドの先頭のコメントに対する返信には、先頭に矢印を表示しています。

No.1 bzbell : (無題)

こんにちわ^^

MTIfTemplateTypeプラグイン使わせていただきました。
わたしの中ではかなり重宝しそうなプラグインの1つになりそうです。

ありがとうございます。

No.2 footbrain : (無題)

こんばんは。
本当にお世話になっています。

「再構築不要化カスタマイズ」を利用したダイナミック・パブリッシング化作業に伴い「DivPages.pl」を利用して、ページ分割しておりますが、

テンプレートの種類によってページを移動するためのリンク表記を変えているので、この「テンプレートの種類を判断するプラグイン」は、とても重宝しています。

ありがとうございます

僕のブログでは、Categoryアーカイブにテンプレートを二つ作成して、エントリーの配列を昇順と降順に切り替えるような事を行っているので、できれば、テンプレートの種類に加えて、テンプレート名で判断できるようになると、もっと便利に使えるだろうと思うのですが、いかがでしょう?

対応していただく事は可能でしょうか?

No.3  Author Profile Page: (無題)

>footbrainさん
こんにちは。

ご希望の件ですが、再構築処理の中では、再構築対象のテンプレートの名前を調べる方法がないようです。
そのため、このプラグインでは対処できません。

代わりの策として、MT標準のMTSetVarタグと、拙作のVarHandlerプラグインを組み合わせる方法があります。
個々のテンプレートの先頭に「<$MTSetVar name="tmpl_name" value="テンプレート名"$>」のようなタグを入れておき、テンプレート名を判断したい箇所を以下のように書きます。

<MTIfStrVar name="tmpl_name" value="テンプレート名1">
テンプレート1の時に出力する内容
</MTIfStrVar>
<MTIfStrVar name="tmpl_name" value="テンプレート名2">
テンプレート2の時に出力する内容
</MTIfStrVar>

No.4 footbrain : (無題)

>壱さん
スゴイ!
これは他にも使えそうです。

VarHandlerプラグインは<MTElse>も使えるんですね。

壱さんが作られた4つのプラグインを駆使して、長い間やりたかった事ができるようになりました。

本当にありがとうございます。

実は、まだ昇順にソートしたカテゴリー・アーカイブページを、DivPagesを使って分割したいと思っているのですが、<MTEntriesDivPages sort_order="ascend">と書くと、ページ内でしか昇順にソートされないので、悩んでいます。汗

<$MTDivPagesInit per_page="10" sort_order="ascend">と書けるのかなと思い、試してみたが駄目でなんですね。汗2

No.5  Author Profile Page: (無題)

>footbrainさん
こんにちは。

MTEntriesDivPagesタグは、内部的にはMTEntriesタグの処理を呼び出し、以下のようにするのと同じことを行っています。

<MTEntries offset="飛ばすエントリーの件数" lastn="ページあたりのエントリーの数">

これとsort_orderを組み合わせると、お書きになったような現象が起こりました。

ということで、この問題はMTの不具合だと思われます。
とりあえず、シックス・アパートにフィードバックを送っておきました。

No.6 footbrain : (無題)

>壱さん
こんにちは。

いろいろとありがとうございました。

MTの不具合ですか。
これでようやく納得できました。音符

コメントする