2008年9月26日

MTInclude タグによる SSI(サーバサイドインクルード)不要なインデックステンプレートのモジュール化

MTInclude タグによるインデックステンプレートのモジュール化を紹介します。

注:この手法は再構築を行わないと情報が更新されないので、比較的静的な情報か、定期的に再構築を行う運用環境でご利用ください。

1.概要

「最近のブログ記事」をモジュール化する例で、イメージ図を示します。

インデックステンプレートのモジュール化

サイドバーに表示する「最近のブログ記事」をモジュール化する場合、インデックステンプレートで作成します。ファイル名は recent_entry.html としておきます。

次にメインページやブログ記事などのテンプレートに MTInclude タグを記述して、file モディファイアに recent_entry.html を指定します。file モディファイアで指定したファイルの内容は、出力するページ内に展開されます。

この方法を用いれば、すべてのページに対し、同じ内容の「最近のブログ記事」を表示することができます。
「最近のブログ記事」以外に、「最近のコメント」「最近のトラックバック」「カテゴリーリスト」「月別アーカイブリスト」「タグクラウド」などにも適用できます。

2.メリット・デメリット

メリット

  • リストの再構築回数を減らせるので、全体の再構築時間の短縮が可能です。
  • 全ページで同じ内容のリストを表示することができます。
  • SSI(サーバサイドインクルード)の設定が不要。PHP化も不要です。

デメリット

  • リストの表示内容を更新するには、再構築が必要です。

3.具体的なカスタマイズ例

Movable Type 4 以降で、デフォルトテンプレートの「ウィジェット」にある「最近のブログ記事」をモジュール化してみます。配布テンプレートでも同じ作業です。

ブログ管理画面の「デザイン」→「テンプレート」の「インデックステンプレートを作成」をクリック。

テンプレート一覧

インデックステンプレート作成画面で次の内容を設定。

テンプレート名:最近のブログ記事
テンプレートの内容:「ウィジェット」の「最近のブログ記事」の内容をそのままペースト
出力ファイル名:recent_entry.html(拡張子は .html でなくても構いません)
テンプレートの種類:カスタムインデックステンプレート
公開:スタティック

テンプレート作成画面

作成したら保存し、再構築まで行ってください。再構築後、テンプレート編集画面右の「公開されたテンプレートを確認」をクリックして、ファイルが出力されたことを確認してください。次のような、スタイルを適用していないテキストが表示されていればOKです。

最近のブログ記事

ブログ管理画面の「デザイン」→「ウィジェット」→「最近のブログ記事」を開き、テンプレートの内容を削除して、次のサブテンプレートを設定。

<$MTBlogSitePath cat="recent_entry.html" setvar="recent_entries"$>
<$MTInclude file="$recent_entries"$>

サブテンプレート設定後は次のようになります。

ウィジェット「最近のブログ記事」

解説すると、MTBlogSitePath タグはURLではなく、ブログディレクトリまでのパスを出力します。cat モディファイアに先ほど作成したインデックステンプレートで出力するファイル名 recent_entry.html を設定することで、ブログディレクトリのパスにファイル名を結合した形で出力します。
そして setvar モディファイアで、出力する内容を変数 recent_entries に設定します。

MTBlogSitePath タグに設定した2つのモディファイアの順番は逆転させないでください。グローバルモディファイアは先に設定したものから順番に処理を実行します。もし、順序を逆転させると、変数 recent_entries には recent_entry.html が設定されません。

グローバルモディファイアの順序性については、「Movable Type 4.2 パーフェクトガイド」をお持ちであれば、類似した事例が425 ページの下から3段目のパラグラフにあります。参考になれば幸いです。

MTInclude タグの file モディファイアには、設定した変数 recent_entries を指定します。変数の先頭に「$」をつけるのを忘れないでください。

ここでは file モディファイアに変数を設定しましたが、次のように recent_entry.html までのパスを直接指定してもかまいません。

<$MTInclude file="/home/hoge/www/recent_entry.html"$>

設定したら保存して、メインページなどの各テンプレートを再構築して、表示を確認してください。

ウィジェット「最近のブログ記事」

4.デフォルトテンプレートで「最近のブログ記事」などをすべてのページに表示する

デフォルトテンプレートでは「最近のブログ記事」「最近のコメント」などのいくつかのウィジェットは「ホームページウィジェットグループ」ウィジェットを経由してインクルードしているので、上記の設定だけではメインページだけしか表示されません。

すべてのページでウィジェットを表示させるには、「ホームページウィジェットグループ」ウィジェットにある MTIf タグを削除するか、囲む位置を変更します。

例えば、「最近のブログ記事」だけを全ページに表示させるには次のように変更します。

変更前

...前略...
<mt:If name="main_index">
    <$mt:Include widget="最近のコメント"$>
    <$mt:Include widget="最近のブログ記事"$>
    <$mt:Include widget="アイテム"$>
    <$mt:Include widget="タグクラウド"$>
</mt:If>

変更後

...前略...
<mt:If name="main_index">
    <$mt:Include widget="最近のコメント"$>
</mt:If>
    <$mt:Include widget="最近のブログ記事"$>
<mt:If name="main_index">
    <$mt:Include widget="アイテム"$>
    <$mt:Include widget="タグクラウド"$>
</mt:If>

5.トラブルシューティング

MTInclude タグを利用するので、目的のファイルがみつからない場合、再構築でエラーが発生します。

再構築エラー

エラーが発生した場合、次のような原因がないか、確認しましょう。

  • インデックステンプレートで作成したファイルの実体が存在しない(未再構築)。
  • MTInclude タグで指定したファイル名が誤っている。
  • MTInclude タグで指定したファイルのパスが誤っている。
Comments [2] | Trackbacks [0]
Now loading...
ギターに入った猫
掲載広告募集
Styles
Font Size
Default
For defective color vision
Gray Scale
RGB Color
Search this site

このブログをメールで購読する by:FeedBurner


AMN
Categories
Monthly Archives
2017年
2016年
2015年
2014年
2013年
2012年
2011年
2010年
2009年
2008年
2007年
2006年
2005年
2004年
2003年
BlogPeople
Syndicate this site
FeedBurner(RSS1.0/RSS2.0/Atom)
Counter
これまでのアクセス
Powered by
Movable Type 6.0.3