TopMovable Typeテンプレートタグ > 2013年10月
2013年10月 9日

Movable Typeのテンプレートタグをテンプレートで生成する方法

October 9,2013 12:55 AM
Tag:[, ]
Permalink

Movable Typeのテンプレートタグをテンプレートで生成する方法を紹介します。

1.概要

MTのテンプレートタグは、テンプレート上に「<$mt:EntryTitle$>」のように記述し、テンプレートを再構築することでその内容を出力しますが、テンプレート上に直接テンプレートタグ名を記述するのではなく、テンプレート上でテンプレートタグを作りたいケースがあるかもしれません。

で、以下の記事でテンプレートタグをテンプレートを使って生成する方法が紹介されています(他にも紹介記事がありましたらすいません)が、この方法や仕組みについてこのブログでも一度まとめさせて頂きたいと思ってました。

ということで、同じような内容になってしまって恐縮ですがこのエントリーでも紹介したいと思います。

2.既存のテンプレートタグを生成する

実際に使うことはないと思いますが、まず簡単な例として、MTEntryTitleタグをテンプレート上で生成する例を紹介します。

ソースコードは次のようになります。

<mt:SetVarBlock name="tag">&lt;$mt:EntryTitle$&gt;</mt:SetVarBlock>
<$mt:GetVar name="tag" decode_html="1" mteval="1"$>

まず、MTEntryTitleタグの元となる内容を、MTSetVarBlockタグで変数tagに設定します。このとき、MTタグの左右のブラケットは「&lt;」と「&gt;」はエンコードした形で設定しますエンコードしておかないとテンプレートタグとして評価されてしまうためです。

<mt:SetVarBlock name="tag">&lt;$mt:Entry<$mt:GetVar name="tagname"$>$&gt;</mt:SetVarBlock>

そして、MTGetVarタグで変数tagの内容を取得します。

<$mt:GetVar name="tag" decode_html="1" mteval="1"$>

この行にあるdecode_htmlモディファイアによって、変数tagの内容にある「&lt;」「&gt;」が次のようにデコードされて、テンプレートの形になります。

<$mt:EntryTitle$>

そしてmtevalモディファイアで変数tagの内容にあるテンプレートタグが評価され、MTEntryTitleタグの内容を出力します。

この例では無駄にテンプレートタグを費やしているだけのようにしか見えませんので、とりあえず次項の説明に進んでください。

3.繰り返し処理でテンプレートタグを生成する

次に、繰り返し処理を使って次の4つのテンプレートタグを生成してみます。

  • MTEntryTitle
  • MTEntryBody
  • MTEntryExcerpt
  • MTEntryKeywords

ソースコードは次のようになります。

<$mt:SetVar name="tags[0]" value="Title"$>
<$mt:SetVar name="tags[1]" value="Body"$>
<$mt:SetVar name="tags[2]" value="Excerpt"$>
<$mt:SetVar name="tags[3]" value="Keywords"$>
 
<mt:Entries>
  <mt:loop name="tags">
    <mt:SetVarBlock name="tag">&lt;$mt:Entry<$mt:GetVar name="__value__"$>$&gt;</mt:SetVarBlock>
    <$mt:GetVar name="tag" decode_html="1" mteval="1"$>
  </mt:loop>
</mt:Entries>

まず最初の4行でテンプレートの元となるタグ名を配列変数tagsに設定します。

<$mt:SetVar name="tags[0]" value="Title"$>
<$mt:SetVar name="tags[1]" value="Body"$>
<$mt:SetVar name="tags[2]" value="Excerpt"$>
<$mt:SetVar name="tags[3]" value="Keywords"$>

次にMTEntriesタグ内(またはブログ記事テンプレートでもOK)でMTLoopタグを使って、さきほどの配列を順番に取得します。

  <mt:loop name="tags">
      :
  </mt:loop>

あとはMTLoopタグ内で2項と同じ処理を行うだけですが、1回ループするたびにタグ名が変わるよう、MTGetVarを使って配列変数の内容を取得します。そのとき、MTGetVarタグのnameモディファイアには、特殊変数「__value__」を利用します。

<mt:SetVarBlock name="tag">&lt;$mt:Entry<$mt:GetVar name="__value__"$>$&gt;</mt:SetVarBlock>

この項の説明で、繰り返し処理を使って異なるテンプレートタグを生成できることが分かったと思います。

4.カスタムフィールドのテンプレートタグを生成する

ここからが本題で、次のようなカスタムフィールドのテンプレートタグを使ったテンプレートを効率的に書きたい場合に、このカスタマイズを使うメリットがあります。

MTSample1
MTSample2
MTSample3
  :
MTSample100

この場合のサンプルコードは次のようになります。

<mt:Entries>
  <mt:for var="i" from="1" to="100">
    <mt:SetVarBlock name="tag">&lt;$mt:Sample<$mt:GetVar name="i"$>$&gt;</mt:SetVarBlock>
      <$mt:GetVar name="tag" decode_html="1" mteval="1"$>
  </mt:for>
</mt:Entries>

実際にはもうちょっとHTMLタグを書き込まないと使いものになりませんが、とりあえずこれだけのコードでMTSample1~MTSample100の内容をすべて出力することができます。

この例ではテンプレートタグ名の末尾が数字なのでfor文が使えますが、末尾がアルファベットの場合であれば、3項のように配列変数またはハッシュで定義してMTLoopタグを使えば同じように実現することが可能です。

Comments [0] | 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
2019年
2018年
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