テンプレートモジュールとPHPによるモジュール化の違い

とある方から、以下のような質問を受けました。

Movable Typeで各テンプレートの共通部分を効率よく監理する方法として、テンプレートモジュールを使う方法と、PHPを使ってモジュール化する方法があります。

ただ、これらの違いがよく分からないので、教えてください。

エントリーのネタが切れていたので(笑)、今日はこのことについて書きたいと思います。

テンプレートモジュールとPHPによるモジュール化は、一見すると似ていますが、大きな違いがあります。

1.テンプレートモジュールの動作

テンプレートモジュールは、それを組み込む先のテンプレートとともに再構築されます。
そのため、組み込み先のテンプレートの種類によって、出力結果が変わる場合があります。

例えば、MTEntriesタグのコンテナをテンプレートモジュールにして、インデックステンプレートとアーカイブテンプレートに組み込んだとしてください。
この場合、インデックステンプレートでは、Blogのすべてのエントリーを対象にして、エントリーの一覧が出力されます。
一方、アーカイブテンプレートでは、そのアーカイブに属するエントリーの一覧が出力されます。

また、組み込んだ先のテンプレートとともに再構築されますので、同じ部分が何度も再構築されることが起こります。
例えば、MTBlogEntryCountタグを使ってBlogのエントリー数の情報を出力する部分を作り、それをテンプレートモジュールにするとしてください。
そして、そのテンプレートモジュールをエントリーアーカイブテンプレートに入れるとしてください。
すると、各エントリーのアーカイブページを出力するたびに、テンプレートモジュールの部分が再構築されることになります。

2.PHPによるモジュール化

PHPでモジュール化する場合、テンプレートモジュールとは違って、再構築済みのファイルを、別のphpのファイルに組み込む形になります。
例えば、前述の「MTEntriesタグのコンテナ」をPHPのモジュールにする場合、組み込み先のテンプレートの種類に関わらず、同じ結果が出力されることになります。

また、インデックステンプレートでモジュールを作り、それをPHPで他のテンプレートに組み込む場合、再構築時には、組み込み元のインデックステンプレートは1回再構築されるだけです。これも、テンプレートモジュールとは動作が異なります。

3.両者の使い分け

上記の話から、テンプレートモジュールと、PHPでのモジュール化とは、使い分けが必要です。

テンプレートモジュールは、同じタグの組み合わせであっても、テンプレートの種類によって出力が違ったり、ページごとに出力が違ったりする場合に使います。
一方、PHPによるモジュール化は、テンプレートの種類や、出力されるページに関係なく、同じ内容の出力をしたい場合に使います。