テンプレートのモジュール化
*2006年8月13日追記*****
Movable Type 3.3から、
デフォルトでWidget Managerというプラグインが追加されました。
これを使うと、htmlのままテンプレートをモジュール化することができます。
詳しくは「Widget Managerでモジュール化」をご覧ください。
****************
記事数が増えるたびに再構築が大変になっていくブログ・・・。
ヘッダー部分やサイドバー部分をちょこっと変更して全ページに反映させようとすると
関係するテンプレート全てを修正し、それを再構築しないといけません。
するともう時間はかかるし、あげくの果てにエラーが出て失敗しまた再構築・・・。
(ノ ゜Д゜)ノ ==== ┻━━┻
という事、みんな体験しているのではないでしょうか(´・ω・`)
大体どうして一箇所変更するだけであっちもこっちも変更して
全部再構築しないといけないんだ!!
と思っていると、それを回避する方法がありましたよ!
各テンプレートで共通している部分(例えばタイトルとか)を
抜き出し新しいテンプレートにして、
それを表示したい所に読み込んでしまうのです。
(*この共通部分を抜き出して新しいテンプレートにしてしまう事を
モジュール化といいます)
こうすると1つのテンプレートを修正するだけで読み込むページ全部に適用されるので
あっちもこっちも同じ修正をしなくて済みますし
無駄な再構築をしなくて良くなり、快適になると思いますヽ(・∀・)ノ
このカスタマイズは読み込む方のページがphp化されている事が条件です。
php化についてはコチラ→MTをphp化するをご覧ください。
1・まずphp化する
2・モジュール化する部分を抜き出す。
例としてブログの上のタイトル部分(ここではヘッダーと呼びます)を抜き出す方法を。
初期テンプレートのままですと
<div id="banner">
<div id="banner-inner" class="pkg">
<h1 id="banner-header"><a href="<$MTBlogURL$>" accesskey="1"><$MTBlogName encode_html="1"$></a></h1>
<h2 id="banner-description"><$MTBlogDescription$></h2>
</div>
</div>
こんな感じだと思います。
これをコピーします。
3・新しいテンプレートを作る
テンプレートのテンプレートを新規作成をクリック。
テンプレートの内容にコピーしたものをペースト。
テンプレートの名前を「ヘッダー」(何でもいいです)
出力ファイル名を「header.html」(何でもいいです) *注1
再構築オプションのチェックを外します *注2
保存し、再構築します。
*注1 header.htmlとしていますが、
phpである必要がある(phpスクリプトを使っている)場合は
header.phpにしてください。この場合のヘッダーでは普通のタグしか
使われていませんのでhtmlで十分だと思い、そちらにしています。
*注2 ヘッダー部分はデザインを変更した時くらいしか
再構築する必要が無いと思います。
なので、再構築時の処理を減らすためにチェックを外しています。
モジュール化するのが「最近のコメント」などの場合、
コメントの投稿があった時点でサイトに反映させたいですね。
そのような時はチェックを付けてください。
4・テンプレートへモジュールを組み込む
各テンプレートの、さっきコピーしてモジュール化した部分を削除します。
替わりに
<?php readfile("/絶対パス/header.html"); ?>
を記入します。
この記入するタグが、よく分かってない私には非常に難解でした(;´Д`)
まず青文字の所にはreadfileの他にincludeを使う事があります。
この使い分け方は
readfile:ファイルを読み込むだけでいいときに使う
include:ファイルを読み込み、それをプログラムとして評価する時に使う
つまり、
readfileはタグなどだけで構成されているファイルを読み込むときに使う。
includeはPHPスクリプトが記述されたファイルを読み込むときに使う。
・・・で合っていると思います(;・ω・)
次に赤文字の所は
読み込むファイルがある場所までのパスを書きます。
上記方法で新しいインデックス・テンプレートを作ったらindex.phpと同じ階層に
header.htmlが出来ていると思います。
indexにheader.htmlを読み込む場合は同じ階層なのでファイル名だけで
いいのですが、モジュールは各アーカイブから利用されるのが一般的なので、
テンプレートごとにパスを書き直すのも面倒ですし、
全部絶対パスを使うのが楽だと思います。
絶対パスとは、トップフォルダから記述したパス名の事です。
なので /mt(MTがあるフォルダ)/header.html
などになるのではないかと思います。
私の場合、上の絶対パスで失敗してエラーが出ました(´・ω・`)
しかし、そのエラーに出ていたパスを書いてみたら
きちんと表示されるようになりました(`・ω・´)
それでいいのかどうか分かりませんが、
表示されているのでいいことにします(;´з`)y-~
多分エラーが出たのは、xreaのサーバーを使っているからじゃないかな?と思います。
なんか、xreaは色々と面倒な部分があるらしいです・・・。
コメントエラー、検索結果などのCGIを使っているテンプレートの場合は
上のパスでは駄目なので、
<$MTInclude file="/絶対パス/header.html"$>
にする必要があります。
説明が長くなりましたが、4・テンプレートへモジュールを組み込む をやったら
保存、再構築して完成!
ヘッダーだけでなく、最近のコメントなど、
すごい所ではエントリーまでモジュール化できるらしいので
色々やってみてくださいね。
このカスタマイズはphpならばどのバージョンでも使えます。
2007年2月12日更新。





始めまして・・・です・・が?・・ゆうさんの所ではお目に掛かっています。
「山の爺」と申す物です、宜しく。
爺もMT成る物を始めて何にも解らず遣っています・・大変参考になります。
なるほど・・readfile、includeの違いが解りました。
訳も解らず全て「include」を使っています。
難解に合ったら又お邪魔しますので宜しく~~ではではご挨拶まで・・。
コメント時刻: 2007年05月10日 21:17
≫山の爺さん
はじめまして・・・な気がしないですね(笑)
お役に立てれば嬉しいです。
私も自分で書いたこの記事を見ないと
違いなんて覚えていません![がーん]
こんなんで・・・まぁ、いいよね。ウン。
コメント時刻: 2007年05月14日 19:55