Movable Type 備忘録

 

 インデックス・テンプレートによる共有化

今日はお題にあるように、インデックス・テンプレートによる各ページの共有化について説明したいと思います。
インデックス・テンプレートには2つの用途があります。1つはモジュール的な使い方で、各ページで共通な部分を抜き出したもの、もう1つは、世間一般的に言われているテンプレートです。 ここでは、前者のモジュール的な使い方のテンプレートについて取り上げてみます。 では、モジュールとインデックス・テンプレートの違いって何?

モジュールとインデックス・テンプレートによる共通化の違い

前回、モジュール作り方について説明しましたが、インデックス・テンプレートによる共通化とどう違うのかについて以下に説明してみます。

モジュールは静的な共通ファイルです。
モジュールとは、各ページで共通な部分を1つにまとめたものだと説明しました。 仮にモジュール内のコードを変更した場合どうなるかというと、モジュールを組み込んでいる、すべてのテンプレートを再構築する必要があります。 モジュールはあくまでも各ページで共通なコードというだけで、各ページにはしっかりそのコードがページ内に埋め込まれてしまうからです。 よって、モジュールに変更が入った場合、モジュールを組み込んでいるページを再構築しなければ、その変更は反映されません。

例えば、エントリ一覧をモジュール化した場合、新規エントリを追加してもモジュールを組み込んだページには反映されません。

インデックス・テンプレートによる共通化はどうかというと、インデックス・テンプレートによる共通化も基本的にはモジュールと同じです。
各ページで共通な部分を外部ファイル( 例えば、auau.html )として1つにすることができます。 また、その外部ファイルに変更が入った場合、モジュールと同様に組み込んでいるすべてのテンプレートを再構築しないと反映されません。

モジュールにしても、インデックス・テンプレートによる共通化にしても、SSIやIFRAMEのようにアクセス時に読込まれるわけではないんです。

じゃぁ違いってないじゃんexclam そうです。明確な違いってないんです。 こういうケースの時はモジュールにした方がいい、あるケースの場合にはインデックス・テンプレートで共通化した方がいいっというのはないんです。 わたしもここら辺は激しく悩みましたイタタ

テンプレートに組み込むコードも、モジュールの場合は

<$MTInclude module="Site Footer"$>

のように、モジュール名称を指定します。
テンプレート・インデックスによる共通化を行った場合は以下のように、

<$MTInclude file="footer.html"$>

テンプレートのファイル名を指定します。

上記の記述の違いを言うなら、<$MTInclude module="●●"$> の方は、完全にMobableType(ムーバブルタイプ)管理下にありますが、 <$MTInclude file="●●"$> の方はMobableType(ムーバブルタイプ)に関係なく、外部ファイルを読込むこともできる…というぐらいでしょうか。

ただし、MovableType(ムーバブルタイプ)のPHP化を行って、各ページの共通部分を抜き出す…ということになった場合には、モジュールとインデックス・テンプレートによる共通化では違いがでます。

PHP化を行うと、アクセス時にインデックス・テンプレートによる共通化を行ったファイルを読込むことができます。 また、各ページ内の共通部分を1ファイルにまとめた分、ディスク容量を節約することができ、再構築の時間も短縮することができます。 それに、PHP化前と違ってインデックス・テンプレートによる共通化したファイルに変更が入ったとしても、その都度再構築する必要はありません。
モジュールは、MovableType(ムーバブルタイプ)のPHP化を行ったとしても相変わらず再構築が必要となります。

PHP化後の使い分けは、モジュールは

  • 頻繁に動的な変化がないもの、例えばフッタやヘッダなど

で、使うといいです。
インデックス・テンプレートによる共通化は、

  • 動的な変化があるもの、例えばカテゴリ一覧とか、最新エントリ一覧、極端な話サイドバー全体でもいいかも。

で、使うといいです。
MovableType(ムーバブルタイプ)のPHP化については、以下のエントリを参考にしてください。
arrow MovableTypeをPHP化する

SEE YOUハート3

 Trackback Pings(0)

No trackbacks found.

 Comments(0)

No comments found.

 Post a Comment

コメント用フィード