mtde.info

Movable Type Developers Express

現在のエントリと同じタグのついた他エントリのリストアップ(自エントリは含まない)

2008年2月 9日 00:01 | Writer: apstar | 記事本文

現在のエントリと同じタグのついた他のエントリを10件列挙するコードサンプルです。現在のエントリ・他のエントリに複数タグがつけられていても正常に動作します。

TagStrings変数へ、現在のエントリで使用されているタグをカンマ区切りで全て繋げた文字列を代入します。

MTEntriesループ中では、エントリひとつひとつのタグを変数へ代入、TagStrings変数へエントリひとつひとつのタグが含まれていないかチェックします。含まれている場合はFind変数へ1をセット、これをフラグとして次からのタグの評価をキャンセルします。これは、他のエントリの最後のタグが、現在のエントリに含まれていない場合フラグがクリアされるのを防ぐためです。

最後に、Find変数が1である(=同じタグが含まれている)他のエントリを、10件取得しています。10件のカウントはEntCnt変数をインクリメントカウントすることで実現しています。

コード

<MTSetvar name="EntCnt" value="0">
<MTSetVarBlock name="CurEnt"><MTEntryTitle></MTSetVarBlock>
<MTSetVarBlock name="TagStrings"><MTEntryTags grue=","><MTTagName></MTEntryTags></MTSetVarBlock>

<ul>
<MTEntries tag="$EntTags">
   <MTSetVarBlock name="LopEnt"><MTEntryTitle></MTSetVarBlock>

   <MTSetVar name="Find" value="0">
   <MTEntryTags>
      <MTSetVarBlock name="tmpTagName"><MTTagName></MTSetVarBlock>
      <MTIf name="Find" eq="0">
         <MTIf name="TagStrings" like="$tmpTagName">
            <MTSetVar name="Find" value="1">
         </MTIf>
      </MTIf>
   </MTEntryTags>

   <MTIf name="Find" eq="1">
      <MTIf name="LopEnt" ne="$CurEnt">
         <MTSetVar name="EntCnt" op="inc">
         <MTIf name="EntCnt" le="10">
            <li><a href="<MTEntryPermalink>"><MTEntryTitle></a></li>
         </MTIf>
      </MTIf>
   </MTIf>
</MTEntries>
</ul>

エントリ関連サンプル

2008 mtde.info