MT4.1 で追加された MTIncludeBlock タグ
Movable Type 4.1 では、新たにいくつかの MT タグが追加されました。今回はその中のひとつ、MTIncludeBlock
の使い方をご紹介します。MTIncludeBlock
は、タグの名前の最後にある、Block というのを除けば、テンプレートモジュールを読み込む為のファンクションタグ、MTInclude
になるように、テンプレートモジュールを読み込む MT タグです。
MTInclude
は以前ご紹介したように、読み込むテンプレートモジュールで使う変数を指定することができます。しかし、指定する変数には MT タグを含めることはできません。
その変数の指定をブロックで行うのを可能にするのが、MTIncludeBlock
ブロックタグです。MTInclude
と MTIncludeBlock
の関係は、MTSetVar
と MTSetVarBlock
のようなものと考えるとわかりやすいでしょう。両者の大きな違いのひとつに、変数に設定する値に 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 タグの出力結果などを代入することができます。MTSetVar
や MTSetVarBlock
をあわせて利用すれば、同じテンプレートの中で複数回、同じテンプレートモジュールを読み込んでも、各々で違った出力結果を得ることができます。
例えば、サイト全体で利用する様々なバナーを表示するといった利用方法が考えられます。簡単な例をみてみましょう。
テンプレートモジュール (名前を 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 で追加された、グローバルテンプレート と組合せて利用すると、管理しているブログ全体で柔軟なテンプレート管理も可能になります。