変数処理を改良するプラグイン(その2)

昨日は、「変数処理を改良するプラグイン」として、VarHandler.plのインストールと、それによって追加されるテンプレートタグを解説しました。
今日はその続きで、VarHandlerプラグインを使った具体的な事例を紹介します。

1.連番の表示

まず、簡単な事例として、「連番」を取り上げます。
例えば、エントリーのタイトル一覧を表示したいとしましょう。そして、個々エントリーの先頭には、1から始まる連番をつけたいとします。
この場合だと、以下のようにテンプレートタグを組み合わせます。

<MTSetVar name="number" value="1">
<MTEntries>
<p><$MTGetVar name="number"$>.<$MTEntryTitle$></p>
<MTAddVar name="number" value="1">
</MTEntries>

1行目のMTSetVarタグで、変数numberの値を1にしています。
次に、3行目のMTGetVarタグで、エントリーのタイトルの前に変数numberの値を表示しています。

そして、4行目のMTAddVarタグで、変数numberの値を1増やしています。
このタグは、エントリーが1つ出力されるごとに処理されますので、順に番号が1つずつ増えていくことになります。

ちなみに、MT標準のテンプレートタグには、コメントに連番をつけるものはあります(MTCommentOrderNumberタグ)。
しかし、エントリーやトラックバックに連番をつけるタグはありません。
そのようなことをしたい場合は、上記の手順を利用すると良いでしょう。

2.奇数件目と偶数件目で処理を変える

エントリーなどの一覧を出力する際に、奇数件目と偶数件目で出力を変えたい場合があります。
例えば、スタイルシートのfloatプロパティを使ってエントリーを2段組で表示する場合、偶数件目のエントリーの後でfloatを解除することが必要です。
こういったことも、変数処理を応用すれば行うことができます。

具体的には、以下のようにします。

<MTSetVar name="flag" value="0">
<MTEntriesなどの一覧出力タグ>

<MTIfNumVar name="flag" value="0">
偶数件目のエントリー等の前に出力する部分
<MTElse>
奇数件目のエントリー等の前に出力する部分
</MTElse>
</MTIfNumVar>

エントリー等の情報を出力する部分

<MTIfNumVar name="flag" value="0">
偶数件目のエントリー等の後に出力する部分
<MTSetVar name="flag" value="1">
<MTElse>
奇数件目のエントリー等の後に出力する部分
<MTSetVar name="flag" value="0">
</MTElse>
</MTIfNumVar>

</MTEntriesなどの一覧出力タグ>

<MTIfNumVar name="flag" value="1">
一覧に出力した件数が奇数件だった場合に、最後に出力する部分
</MTIfNumVar>

変数「flag」の値が0か1で、偶数件目か奇数件目かを判断するようにします。
また、エントリー等を1件出力したら、flagの値を逆に(0なら1に、1なら0に)します。これによって、偶数/奇数の判断が入れ替わります。

さらに、エントリー等の件数が奇数件だった場合、後処理が必要になることもあります。
例えば、偶数件目のエントリー等を出力したときに、終了タグを出力するようにする場合、エントリー等が奇数件だと、最後の終了タグが出力されません。
そこで、エントリー等の件数が奇数件の場合は、後処理も入れるようにしています。

以下のリストは、エントリーを2段組で出力する例です。
「para」というクラスで、floatの指定がしてあるものとしています。

<MTSetVar name="flag" value="0">
<MTEntries>
<MTIfNumVar name="flag" value="0">
<!-- flagの値が0(偶数件目)の時は、先頭のdivタグを出力する -->
<div>
</MTIfNumVar>

<!-- エントリーのタイトルと概要を出力する -->
<div class="para">
<h2><$MTEntryTitle$></h2>
<p><$MTEntryExcerpt$></p>
</div>

<MTIfNumVar name="flag" value="0">
<!-- flagの値が0(偶数件目)の場合は、flagの値を1に変える -->
<MTSetVar name="flag" value="1">

<MTElse>
<!-- flagの値が1(奇数件目)の場合は、flagの値を0に変え、最後の/divタグを出力して、floatを解除する -->
<MTSetVar name="flag" value="0">
</div>
<br style="clear : both;">
</MTElse>
</MTIfNumVar>
</MTEntries>

<MTIfNumVar name="flag" value="1">
<!-- エントリーが奇数件だった場合、最後のfloat解除の処理が行われないので、それを行う -->
</div>
<br style="clear : both;" />
</MTIfNumVar>