MovableTypeのテンプレートモジュールを、はじめてまともに使ってみた。
昔から搭載されていた機能なのに、何故か今までまともに使ってみた事が無かった機能で、かなり勘違いして覚えていた。
何を勘違いしていたかというと、モジュールも単品でファイルを生成するものだと思っていたのだ。
ヘッダーやフッターをモジュールで切り分け、MT以外で構築したページからインクルードしようとしたら、ファイルが出来て無いのでインクルードが出来ず、そこでやっと気が付いた。
まったくもって恥ずかしい失敗なのだが、何か地味に需要がありそうなので、簡単にまとめてみる事にしてみた。
- [テンプレート] - [インデックス] : テンプレートファイルの内容に沿ってファイルを出力(生成)する。
- [テンプレート] - [モジュール] : インクルードされた場合に、モジュールの内容に沿って展開され、インクルード元のテンプレート内容に沿ってファイルを出力(生成)する。
要するに、モジュールはパーツとして、ファイルを生成する事は無く、MTでのみインクルードされる事を前提にした機能。他の方法で構築したページから、モジュールをパーツとしてインクルードする事は、現実的ではない(直でdbを読みに行けば可能だが面倒)という事になる。
というわけで、ヘッダーやフッターなどをモジュール化して、他で構築したページからインクルードするには、やはり[テンプレート] - [インデックス]を使ってヘッダーやフッターなどのパーツをファイル出力し、PHPなどでインクルードする方法がベスト。
両者の違いはこんな感じだろうか。
-
モジュールテンプレートによるインクルード:
構築時に展開されてインクルード。出力されたページは基本的にスタティックで、毎表示に掛かる負荷は少ない。パーツとしてファイルを出力しないので、モジュールパーツはMT以外から基本的に利用出来ない。
-
インデックステンプレートを使いPHPなどによるインクルード:
表示時にインクルードされ展開。出力されたページでは、毎表示毎にインクルード展開の負荷が掛かる。パーツとしてファイル出力するので、パーツは他で構築したページからインクルード可能。
こうやってみるとモジュールテンプレートを利用するのは、以下の場合かもしれない。
- MovableType以外でページを構築する事が無い。
- ページ数が少なく、再構築の負荷を気にする必要は無い。
- アクセス数が膨大で、毎表示に掛かる負荷を少しでも減らしたい。
- PHPやSSIが使えない。
それ以外の場合だと、インデックステンプレートでヘッダーやフッターなどのパーツファイルを生成しておき、他で構築したページなどから、そのファイルをインクルードした方が利便性が高い。
ヘッダーやフッターなどのパーツがファイルとして出来てしまい、他からそのパーツにアクセスされるのが嫌だったら、「/inc/」など適当なディレクトリを作って出力して「.htaccess」で「deny from all」してしまえばいい。インクルードする場合は、denyされないから。
※追記:文章だとわかりずらいので簡単に図にしてみた
