はてなのnaoyaさんのnaoyaのはてなダイアリー - HTML::TagCloudを読んで、COREBlog用のモジュールを作ろうと思っていたのを思い出しました。この Cloud というのは、Flickrdel.icio.usなどで採用されているのですが、Flickrの場合だと写真が、Del.icio.usだとブックマークが、どのようにタグ付けされているかを、その文字のサイズの大小によって表示させる方法と考えて良いのかな。
ということで、作ってみました。右に表示されているサイドバーの内の、CATEGORIESと表示されている部分がそれです。それぞれの文字の大きさが違いますが、文字が大きいほどそのカテゴリのエントリが多いことを意味しています。

最初はDTMLだけでなんとか書こうと思っていたのですが、(こちらは会社の先輩の)いとうさんに「JavaScriptを使った方が簡単じゃない?」とのアドバイスを頂いたこともあり、DTMLとJavaScriptで書きました。
もうちっときれいに書けそうな気もしますがとりあえず。
ということで、設定方法。

- まずはmodulesにcategories_cloudというDTMLドキュメントを追加します。僕は不安なのでcategoriesモジュールをコピペしました。
- categories_cloudの内容は以下のような感じ。
スタイルを5つ用意して、文字のサイズを変えています。でもって、そのカテゴリに属すエントリの個数が全体のうちの10% / 8%/ 6% / 4% 以上かどうかでそれぞれのクラスに振り分けています。
<dtml-comment>
### Categories Cloud Module ###
</dtml-comment>

<div class="sideboxtitle">
<dtml-if "_.len(document_title)>0"><dtml-var document_title>
<dtml-else>Categories</dtml-if>
</div>
<div class="sidebody">
<style>
span.ccloud0 {font-size: 180%;}
span.ccloud1 {font-size: 160%;}
span.ccloud2 {font-size: 140%;}
span.ccloud3 {font-size: 120%;}
span.ccloud4 {font-size: 100%;}
</style>

<script>
var a = [<dtml-in category_list sort=name>
 ['<dtml-var blogurl missing="">/categorylist_html?cat_id=<dtml-var id>',
  '<dtml-var name>', <dtml-var count>],
</dtml-in>];

var t = 0;
for (var i=0; i<a.length; i++)
  t += a[i][2];

for (var i=0; i<a.length; i++) {
  p = a[i][2] / t;
  if (p > 0.1)
    c = 'ccloud0';
  else if (p > 0.08) 
    c = 'ccloud1';
  else if (p > 0.06) 
    c = 'ccloud2';
  else if (p > 0.04) 
    c = 'ccloud3';
  else 
    c = 'ccloud4';

  var o = '<span class="' + c + '"><a href="' +  a[i][0] + '">' 
        + a[i][1] + '</span> ';

  document.write(o);
}
</script>
</div>

- あとはmodules内のindex_htmlに
<dtml-var categories_cloud>
を足すのみで。
Posted by setomits at 10:30 | Comments: 1
Re: COREBlog Categories Cloud Module
Safariでしか画面を確認してなかったんだけど、IEで見たら字の大きさが違わないの。てことで、ちゃんと Array を new して push してくように変更。

次に FireFox で確認したところ、こちらも字の大きさが違わない...。
スタイルシート?
Posted by setomits at 11:37 on 2005 Jul 15th
Leave a comment
Required fields are marked with *
search
calendar
Feb 2012
SunMonTueWedThuFriSat
   1234
567891011
12131415161718
19202122232425
26272829   
archives
photos on flickr
www.flickr.com