Under the Bridge

a Picture of the Late Him

最新記事で使用されているタグの最新5件を表示

2008年2月 7日 22:35 | Writer: yoshi | 記事本文 | コメント(2) | トラックバック(0)

「最新記事で使用されているタグの最新5件を表示」というお題を、オリジナルでやってみる。

なおこれは、Movable Typeドキュメントページに2/5に掲載されたばかりのものである。

http://www.movabletype.jp/同名タイトルのドキュメントページのサンプル

標準テンプレート用コード

ちょっと長くなってしまった。

<MTSetVar name="Limit" value="5">
<MTSetVar name="AllTags" value="0">

<div class="widget-tag-cloud widget">
   <h3 class="widget-header">タグクラウド</h3>
   <div class="widget-content">
   <MTSetVar name="FindTagN" value="0">
   <MTEntries lastn="30">
      <MTEntryTags>
         <MTSetVarBlock name="CurTag"><MTTagName></MTSetVarBlock>
         <MTUnless name="AllTags" like="$CurTag">
            <MTIf name="FindTagN" lt="$Limit">
               <MTSetVar name="FindTagN" op="++">
               <MTSetVarBlock name="FindTags[$FindTagN]"><li class="rank-<$mt:TagRank max="10"$> widget-list-item"><a href="<$mt:TagSearchLink$>"><$mt:TagName$></a></li></MTSetVarBlock>
               <MTSetVar name="AllTags" value="$CurTag" append="1">
            </MTIf>
         </MTUnless>
      </MTEntryTags>
   </MTEntries>
   <ul class="widget-list">
   <MTFor var="x" from="1" to="$Limit">
      <MTGetVar name="FindTags[$x]">
   </MTFor>
   </ul>
   </div>
</div>

アットスタイル無料テンプレート用コード

いや、わたしが使っているので...サイドバーへ貼って挙動を確認するためにわざわざ書き直した。

<MTSetVar name="Limit" value="5">
<MTSetVar name="AllTags" value="0">
<dl>
   <dt>Tags(Newest 5)</dt>
   <dd>
   <div class="module-tagcloud module">
   <div class="module-content">
   <ul class="module-list">
   <MTSetVar name="FindTagN" value="0">
   <MTEntries lastn="30">
      <MTEntryTags>
         <MTSetVarBlock name="CurTag"><MTTagName></MTSetVarBlock>
         <MTUnless name="AllTags" like="$CurTag">
            <MTIf name="FindTagN" lt="$Limit">
               <MTSetVar name="FindTagN" op="++">
               <MTSetVarBlock name="FindTags[$FindTagN]"><li class="module-list-item taglevel<$MTTagRank$>"><a href="<$mt:TagSearchLink$>"><$mt:TagName$></a></li></MTSetVarBlock>
               <MTSetVar name="AllTags" value="$CurTag" append="1">
            </MTIf>
         </MTUnless>
      </MTEntryTags>
   </MTEntries>
   <ul class="widget-list">
   <MTFor var="x" from="1" to="$Limit">
      <MTGetVar name="FindTags[$x]">
   </MTFor>
   </ul>
   </div>
   </div>
   </dd>
</dl>

結果と考察

以下のような仕様で。

  • タグの個数は5個まで。
  • しかし5個のタグは全て異なるタグを拾うようにする。
  • つまりタグ数で制御するから探すエントリ数は幾らでもよいことになる。MTEntries lastn="10"でもlastn="30"でも(タグが足りない場合以外は)結果は変わらない。
  • エントリに複数タグがついている場合は考慮しない(難しくなるからな...)。

このような処理で頭を悩ませるのは、一度でも登場したタグは以後登場させてはいけないことだろう。MTSetVar name="AllTags" value="$CurTag" append="1"で、毎ループの登場タグを連結していって比較用タグ文字列を生成(これは動作上インクリメントカウント・タグリンク配列生成後となる)し、MTUnless name="AllTags" like="$CurTag"でその文字列中にタグがないかどうかをlikeモデファイアで手抜きチェックする。そのチェック用unless文の内部にタグ数を制御するMTIf文が登場し、全てクリアしたらタグカウントをインクリメントする。

テスト時間が短いので絶対に正しいという確証はないが、なかなかいい感じ。以下に実験用画像でも貼っておこう。

20080206tag.gif

トラックバック(0)

このブログ記事を参照しているブログ一覧: 最新記事で使用されているタグの最新5件を表示

このブログ記事に対するトラックバックURL:

コメント(2)

oscar (2008年2月11日 12:47)

すでに、もとエントリー書きなおされてますね。
新しい内容で、ちゃんと動作しました。

yoshi (2008年2月11日 18:10)

おおお、そうなんですね。わたしはローカル環境に書きなおされる前のコード持っています。見比べてみようかな。

コメントする






Categories
Entries
Feed
スポンサードリンク

parts

フィードメーター - Under the Bridge

あわせて読みたい

なかのひと

2008年4月5日開催、MT4LP5

2008 yoshi(apstar)