可読性と速度を両立させる MTSetVarBlock / MTSetVarTemplate の使いどころ
公開日 : 2016-01-06 12:04:03
MTSetVarBlock - テンプレートタグリファレンス
このブロックタグで囲んだ内容を値にした変数を設定します。このタグの中ではテンプレートタグが利用できます。変数を呼び出すときは、MTGetVar, MTVar ファンクションタグを使います。
MTSetVarTemplate ブロックタグとの違いは、囲んだ内容が処理された結果が値となるか、囲んだ内容が処理されずテンプレートのまま値となるかです。MTSetVarBlock ブロックタグでは囲んだ内容が処理された結果が値となります。
設定した値は $name_foo として、モディファイアの値としても利用することができます。
MTSetVarTemplate - テンプレートタグリファレンス
このブロックタグで囲んだ内容を値にした変数を設定します。変数を呼び出すときは、MTGetVar, MTVar ファンクションタグを使います。
MTSetVarBlock ブロックタグとの違いは、囲んだ内容が処理された結果が値となるか、囲んだ内容が処理されずテンプレートのまま値となるかです。MTSetVarTemplate ブロックタグでは囲んだ内容が処理されずテンプレートがそのまま値となり、MTGetVar, MTVar ファンクションタグで呼び出されたテンプレートで処理をおこないます。
使いどころが良くわからない的な話しがあるようですが、ひとつわかりやすい例を。
ナビゲーションブロックの組み立てのための Loop 系タグの呼び出しを1回にまとめる
グローバルナビ、サイドナビ、フッターの3カ所に MTTopLevelCategories が使われているとします。良くある話しですよね? でもHTMLの形は違うと。
この時、MTTopLevelCategories の呼び出しを一回にまとめたい。だってその方が速いし。カテゴリが多く、テンプレートに MTTopLevelCategories が3回も4回も呼ばれてるケースなら相当速くなりますよ。
以下のようにすればループは一回で済みます。モジュール化して呼び出すときはキャッシュに注意ね。キャッシュされたテンプレートは(キャッシュヒットすると)評価されないので変数にセットされません。
<mt:TopLevelCategories>
<mt:SetvarBlock name="カテゴリリスト・グローバルナビ">
カテゴリリスト・グローバルナビのMTML
</mt:SetvarBlock>
<mt:SetvarBlock name="カテゴリリスト・サイドナビ">
カテゴリリスト・サイドナビのMTML
</mt:SetvarBlock>
<mt:SetvarBlock name="カテゴリリスト・フッタナビ">
カテゴリリスト・フッタナビのMTML
</mt:SetvarBlock>
</mt:TopLevelCategories>
# 呼び出し
<mt:Var name="カテゴリリスト・グローバルナビ">
<mt:Var name="カテゴリリスト・サイドナビ">
<mt:Var name="カテゴリリスト・フッタナビ">
もし各ブロックのHTMLの違いが一部である場合、例えば下記のような場合は MTSetVarTemplate の出番です(class名だけが違うなど)。
<mt:SetVarTemplate name="カテゴリリスト">
<mt:SubCatIsFirst><ul class="<mt:Var name="nav_class_name">-list"></mt:SubCatIsFirst>
<mt:If tag="CategoryCount">
<li class="widget-list-item"><a href="<$mt:CategoryArchiveLink$>"><$mt:CategoryLabel$></a>
<mt:Else>
<li class="widget-list-item"><$mt:CategoryLabel$>
</mt:If>
<$mt:SubCatsRecurse$>
</li>
<mt:SubCatIsLast></ul></mt:SubCatIsLast>
</mt:SetVarTemplate>
<mt:TopLevelCategories>
<mt:Var name="カテゴリリスト" nav_class_name="gnavi" setvar="カテゴリリスト・グローバルナビ">
<mt:Var name="カテゴリリスト" nav_class_name="snavi" setvar="カテゴリリスト・サイドナビ">
<mt:Var name="カテゴリリスト" nav_class_name="fnavi" setvar="カテゴリリスト・フッタナビ">
</mt:TopLevelCategories>
# 呼び出し
<mt:Var name="カテゴリリスト・グローバルナビ">
<mt:Var name="カテゴリリスト・サイドナビ">
<mt:Var name="カテゴリリスト・フッタナビ">
ちょっと自分でもわかりにくいのを先日書いてしまったので懺悔の意味で書いた。後悔はしていない。