MTIfの条件分岐

 MTIfタグが使い辛くてあまり自らすすんで使ってこなかったのですが以外に便利なのでその基本を紹介。
PHPやPerl、Shell、JavaScriptなどのIFとはちょっと違うのは、何故かタグがネストされていることです。例えばPHPでは、
if ($key == "yes") {
  <処理1>;
} elseif {
  <処理2>;
} else {
  <処理3>;
}
というもので、こういう形式にプログラマーはかなり慣れちゃってます。もうこれが普通の条件分岐だという頭になってます。しかしMTIfタグは、こんな風にネストされていました。ここがわからなかった。
<mt:If>
  <処理1>;
  <mt:ElseIf>
    <処理2>;
  </mt:ElseIf>
  <mt:Else>
    <処理3>;
  </mt:Else>
</mt:If>
どうしてこんな風になっているのかというといわゆるブロックタグといわれている<mt:Entries></mt:Entries>のようなネストされた状態で構築してゆくという構造がそのまま反映されているのだと思います。MTタグに極端に少ないのは、玄人プログラマーが好むショートカットというものでかなり綿密に文字でタグを書いてゆかないといけないというかつてのシェルスクリプトを思い出させます。@_とか||とか、&&とか使わないわけです。タグの文字を読むと何となく意味がわかりますが、||に関しては意味わからんですよ。

MTIfタグのアトリビュート

 いわゆる条件分岐で必要な要素はずべて揃ったと言えます。変数に対して理論積、理論和にはじまり、加減乗除の演算子も使えてこれはもうプログラムだな...と思わせるものがあります。もうSmartyなどとはかけ離れたテンプレートの様式になっております。
 使用できるアトリビュートは以下のとおり。
  • name
  • eq
  • ne 
  • gt
  • lt
  • ge
  • le
  • like
  • tag
  • op (add(+), sub(-), mul(*), div(/), mod(%), ++, --)
  • index
  • key
  • test
 文脈(コンテクスト)によって使い分けなくてはならないのでかなり覚えるのが面倒なのですが、
<mt:SetVarBlock name="pagename"> <!--変数名を忘れずに指定-->
    <$mt:IndexBasename$> <!--値をセット-->
</mt:SetVarBlock>

<mt:If name="pagename" eq="index">
   インデックスページ(index.html)です。
</mt:If>
みたいな感じでしょうか?

 また、ブログに貼り付けられたアイテム(画像)をサムネイルで表示するという場合には、
<mt:SetVar name="top_cnt" value="0">

<mt:Entries lastn="100">
<mt:EntryAssets lastn="1" type="image OR video">
   <mt:If tag="AssetThumbnailURL">

    <mt:SetVar name="top_cnt" op="++">
    <mt:If name="top_cnt" le="10">
      <a href="<$mt:EntryPermalink$>"">
        <img src="<$mt:AssetThumbnailURL$>" width="180" />
      </a>
    </mt:If>

   </mt:If>
</mt:EntryAssets>
</mt:Entries>
というような書き方になります。ブログに投稿された画像を10個取り出してサムネイルを作っています。画像をクリックするとその記事に行く。
 いろいろな書き方がありますが、私もあまり使わないのでメモ程度ですみません。