November 01, 2006
MTのInclude問題は「MTIncludePlus」で解決
- 更新: 2007 年 03 月 04 日 15:37
- 2006 年 11 月 01 日 23:58 に asiamoth が投稿
- タグ: MovableType, plugin, template, 動的生成
- カテゴリー: Movable Type
- コメントする
- トラックバックする
テンプレいじりの必須知識
どのブログツールでも大差ないかと思いますが、MTでデザインを変更する場合、それぞれのページの「テンプレート」を変更することになります。少しテンプレート変更に慣れてくると、複数のテンプレートで同じ部分が繰り返されていることに気がつくでしょう。例えば「カテゴリィ一覧」や「月別アーカイブ」、「最近の記事一覧」などが代表かと思います。
さて、MTといえば再構築、というのが有名ですが(?)、できれば再構築時間を短くしたい。ちょっと記事を変更しただけで何時間も待たされる(おおげさ)のは厭だ、という人が大半でしょう。そんなときには、それぞれのテンプレートの共通部分を、何とかして使い回したいものです。
幸いにして、MTには<MTInclude>というピッタリの専用タグがあるので、これを使うのが解決の糸口です。インターネッツ上に、いくらでも有益な情報があります。真琴さんのところがまとまっていていいですね。
hxxk.jp - カテゴリアーカイブとナビゲーションリスト
MTIncludeの仕様
いよいよ本題ですが、<MTInclude>には「<MTInclude>タグの中にはMTタグを記述できない」という仕様があります(MT3.2で確認)。
例えば、年ごとに作成された何らかのファイルを取り出すために
<MTInclude file="<MTArchiveDate format="%Y">.php">
と書いてもダメな訳です。どうしても読み込みたい場合は
<?php readfile('<MTArchiveDate format="%Y">.php'); ?>
という具合に、PHPの力にすがることになります。──でも、毎回ページが読み込まれるたびにPHPスクリプトが実行されるので、サーバに負担がかかる──と思います(どの程度かは知らない)(レンタルサーバ者の悲しさ)。
──では、どうするか?
MTIncludePlus
そこで、MT内で完結させるためのプラグインがあります。
MT Extensions: MTIncludePlus 1.1
上記のプラグインはMTIncludeの拡張版のような動きをします。例えば先ほどの例の場合、
<MTIncludeFile><MTBlogSitePath>archives/<MTArchiveDate format="%Y">.php</MTIncludeFile>
という記述でファイルを読み込めます。
ちなみに、
<MTIncludeFile><MTArchiveDate format="%Y">.php</MTIncludeFile>
だとエラーになります。<MTIncludeFile>は「サーバ内の絶対パス」か「MTのあるディレクトリ」にあるファイルしか読み込めないようです。
──というか、MTIncludePlusのコードを見てみると判るように、実は、MT標準のInclude機能を使っているだけという。
応用例
MTIncludePlusプラグイン:2-mix Laboratoryではカテゴリィ毎に「カテゴリィ説明文」を読み出す例が書いてあります。なるほど。
<MTIncludeModule><MTCategoryDescription></MTIncludeModule>
MTFastInclude
MT Extensions: MTFastInclude 1.1
よく解ってないまま、こちらも導入。MTIncludeを使うときにキャッシュしてくれる、のかな?
「Perl版ダイナミック・パブリッシング」でも動作
The blog of H.Fujimoto:再構築不要化カスタマイズ(全SQL対応・その1)で紹介されている「Perl版ダイナミック・パブリッシング」でも問題なく動くのがうれしいところ。
「動的生成したページ」から読み込むことはもちろん、「動的生成したページ」を読み込むこともできました。
まとめ
上記の2つのプラグインは、日本語サイトであまり解説されていないので、これから流行るといいな。
あと、MTIncludePlusには<MTIncludeURL>というタグがあります。これは「任意のURLを読み込む」ことができる、何とも恐ろしいタグ。ということは……ゆめがひろがりんぐ。
この記事のタグ(偽)
[3.3だとプラグインなしでできたりして]
トラックバック
このエントリーのトラックバックURL:
"MTのInclude問題は「MTIncludePlus」で解決"へのトラックバックはまだありません。
コメント
コメントを投稿
"MTのInclude問題は「MTIncludePlus」で解決" にコメントを投稿することができます(別ウィンドウが開きます)。