Movable Type CMSプラットフォーム Movable Type
ドキュメントサイト

Blogブログ

MT4.1 で追加された MTIncludeBlock タグ

Movable Type 4.1 では、新たにいくつかの MT タグが追加されました。今回はその中のひとつ、MTIncludeBlock の使い方をご紹介します。MTIncludeBlock は、タグの名前の最後にある、Block というのを除けば、テンプレートモジュールを読み込む為のファンクションタグ、MTInclude になるように、テンプレートモジュールを読み込む MT タグです。

MTInclude は以前ご紹介したように、読み込むテンプレートモジュールで使う変数を指定することができます。しかし、指定する変数には MT タグを含めることはできません。

その変数の指定をブロックで行うのを可能にするのが、MTIncludeBlock ブロックタグです。MTIncludeMTIncludeBlock の関係は、MTSetVarMTSetVarBlock のようなものと考えるとわかりやすいでしょう。両者の大きな違いのひとつに、変数に設定する値に MT タグが利用できるかどうかというものがあります。

サンプルテンプレートを利用して、タグの動作をみてみましょう。

MTIncludeBlock ブロックタグの動作サンプル

MTSetVarBlock ブロックタグの働きを確認するサンプルテンプレートは以下のようになります。

<MTIncludeBlock module="foo" var="test">
<$MTBlogName$>
</MTIncludeBlock>

module モディファイアは MTInclude と同じで、読み込むテンプレートモジュールの名前を指定します。あわせて、var モディファイアがありますが、これは、MTIncludeBlock ブロックタグで囲んだ内容を、読み込む foo テンプレートモジュールで利用する為の変数名を設定します。このサンプルの場合、foo テンプレートモジュールは以下のようになります (動作確認用の簡単なサンプル)

<p><$MTGetVar name="test"$></p>

これらのテンプレートを実際に再構築してみると、出力結果は以下のようになります (ブログの名前が『ゾウ好きの戯言』の場合)

<p>ゾウ好きの戯言</p>

サンプルテンプレートと、出力結果を見てわかるように、MTIncludeBlock ブロックタグで test という変数に MTBlogName ファンクションタグの値を設定し、読み込む foo テンプレートモジュールでは、MTGetVar で変数 test の値を参照するようにしています。つまり、MTIncludeBlock ブロックタグで囲んだ内容によって、foo テンプレートモジュールは、出力結果が変るという仕組みです。

サンプルテンプレートの MTIncludeBlock ブロックタグには、var モディファイアで変数の名前を設定していますが、この var モディファイアは省略することができます。省略した場合、変数の名前は contents と設定されます。サンプルテンプレートの MTIncludeBlock ブロックタグで var モディファイアを省略した場合、読み込む foo テンプレートモジュールは以下のようになります。

<p><$MTGetVar name="contents"$></p>

MTIncludeBlock ブロックタグの利用例

MTIncludeBlock ブロックタグは、読み込むテンプレートモジュールで利用する変数の値に MT タグの出力結果などを代入することができます。MTSetVarMTSetVarBlock をあわせて利用すれば、同じテンプレートの中で複数回、同じテンプレートモジュールを読み込んでも、各々で違った出力結果を得ることができます。

例えば、サイト全体で利用する様々なバナーを表示するといった利用方法が考えられます。簡単な例をみてみましょう。

テンプレートモジュール (名前を banner とします) は以下のようになります。

<a href="<mt:getvar name="banner_link"><img alt="<mt:getvar name="banner_alt">" src="images/<mt:getvar name="banner_name">.jpg" width="<mt:getvar name="banner_width">" height="<mt:getvar name="banner_height">" /></a>

banner テンプレートモジュールの中には、いくつかの MTGetVar ファンクションタグが書かれています。各々には、違う変数に設定された値を参照するようになっており、これらが、MTIncludeBlock で読み込む際に MTSetVar などを利用して設定した変数の値を参照し、出力します。banner テンプレートモジュールを読み込む MTIncludeBlock ブロックタグのサンプルは以下のようになります。

<MTIncludeBlock module="banner">
<MTSetVar name="banner_link" value="http://example.com/">
<$MTSetVar name="banner_name" value="advertisement_a"$>
<$MTSetVar name="banner_width" value="728"$>
<$MTSetVar name="banner_height" value="90"$>
</MTIncludeBlock>

このサンプルテンプレートを使用して、banner テンプレートモジュールを読み込んだ場合、出力結果は以下のようになります。

<a href="http://example.com/"><img alt="" src="images/advertisement_a.jpg" width="728" height="90" /></a>

MTSetVar で変数に設定する値を変えて、同じテンプレートの中で複数回 banner テンプレートモジュールを読み込んでみます。

<MTIncludeBlock module="banner">
<MTSetVar name="banner_link" value="http://example.com/">
<$MTSetVar name="banner_name" value="advertisement_a"$>
<$MTSetVar name="banner_width" value="728"$>
<$MTSetVar name="banner_height" value="90"$>
</MTIncludeBlock>

<MTIncludeBlock module="banner">
<MTSetVar name="banner_link" value="./example.html">
<$MTSetVar name="banner_name" value="advertisement_b"$>
<$MTSetVar name="banner_width" value="468"$>
<$MTSetVar name="banner_height" value="60"$>
</MTIncludeBlock>

<MTIncludeBlock module="banner">
<MTSetVar name="banner_link" value="http://example2.com/foo.html">
<$MTSetVar name="banner_name" value="advertisement_c"$>
<$MTSetVar name="banner_width" value="125"$>
<$MTSetVar name="banner_height" value="125"$>
</MTIncludeBlock>

出力結果は以下のようになります。

<a href="http://example.com/"><img alt="" src="images/advertisement_a.jpg" width="728" height="90" /></a>

<a href="./example.html"><img alt="" src="images/advertisement_b.jpg" width="468" height="60" /></a>

<a href="http://example2.com/foo.html"><img alt="" src="images/advertisement_c.jpg" width="125" height="125" /></a>

今回の例では、画像のサイズまで細かく指定していますが、バナーの名前とサイズが決っているなら、MTIncludeBlock ブロックタグで指定するのは、画像の名前だけにし、名前を利用した条件分岐などを行うといったことも可能です。

MTIncludeBlock ブロックタグを利用すれば、例で紹介したような少し内容を変更するだけで、使いまわしができるものを複数のテンプレートの様々な場所で読み込むといったカスタマイズが可能になります。

同じく、Movable Type 4.1 で追加された、グローバルテンプレート と組合せて利用すると、管理しているブログ全体で柔軟なテンプレート管理も可能になります。

  • このエントリーをはてなブックマークに追加