TOPページ > Tips系 > インクリメントカウント
インクリメントカウント
インクリメントを利用したカウントは、慣れると非常に便利な機能です。
たとえば、「一部のエントリが画像アイテムを持っている」という条件で、画像アイテムを持つエントリのみ抽出するのは、インクリメントカウントを用いると、簡単に実現できます。
コード例
<!-- 数をカウントする変数は必ず初期化する -->
<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系