mtde.info

Movable Type Developers Express

インクリメントカウント

2008年2月 3日 10:15 | Writer: apstar | 記事本文

インクリメントを利用したカウントは、慣れると非常に便利な機能です。

たとえば、「一部のエントリが画像アイテムを持っている」という条件で、画像アイテムを持つエントリのみ抽出するのは、インクリメントカウントを用いると、簡単に実現できます。

コード例

<!-- 数をカウントする変数は必ず初期化する -->
<MTSetVar name="ImageCount" value="0">

<!-- 画像アイテムを持つエントリのみ抽出する -->
<MTEntries>
   <MTEntryAssets type="image">
      <MTSetVar name="ImageCount" op="++">
      <MTSetVarBlock name="EntryLink[$ImageCount]"><$MTEntryPermalink$></MTSetVarBlock>
      </MTIf>
   </MTEntryAssets>
</MTEntries>

<!-- 取得した配列データを出力 -->
<MTFor var="x" from="1" to="$ImageCount">
   <MTGetVar name="EntryLink[$x]">
</MTFor>

インクリメントを利用したカウントで気をつけたいのは、カウント用の変数は必ず初期化せねばいけない点です。これを怠ると、Movable Type 4.1で確かめたのですが、多くの場合正常に動作しません。

このサンプルの場合は、<MTEntryAssets type="image">ブロックタグでエントリ中の画像をループさせ、<MTSetVar name="ImageCount" op="++">の一行でインクリメントカウントを行っています。つまり画像を持たないエントリはここを通過せず、インクリメントカウントは行われません。

また、この書き方であると、ひとつのエントリに画像が2枚あると、配列に同じデータが2つ入ることとなります。

インクリメントカウントを行って生成したImageCount変数は、サンプルにもあるように、その後のMTForループのtoモデファイアにそのまま使用することができます。

Tips系

2008 mtde.info