Movable Type 備忘録

 タグクラウドのフォントサイズの計算式

  • Apr152008
  • Vote:
    http://bizcaz.com/archives/2008/04/15-080754.php
  • Categories: Customize
  • Tags: ,
  • Social Bookmark

おはようございます^^

Open MagicVox.net さんとこでおもしろそうな記事が紹介されてました ( ̄∇ ̄)/

タグクラウドのフォントサイズ計算式に対数関数が使われてます。

これからお仕事行かなきゃなので試せないけど、帰宅したら試してみようと思います。
どんなふうに表示が変わるかなぁ o(●´∀`●)o ワクワク

お試しあれぇ~♪

- 2008.04.15 追記 -

お仕事中だけど気になって試してみました (; ̄∇ ̄A 内緒でお願いします。
時間がないので詳しい説明は省きます (m;_ _)mペコ

コードは以下の通りです。

  1. var tagclouds = {
  2.     version: '1.0.4',
  3.     weight: 1, // フォント重み(大きい値にするとフォントが小さくなる)
  4.     font_size_min: 12,// 基準となるフォント最小サイズ
  5.     font_size_max: 41,// 基準となるフォント最大サイズ
  6.     count_min: Math.log(<MTTags limit="1" sort_by="count" sort_order="ascend"><$MTTagCount$></MTTags>), // 最小タグ数(自然対数仕様)
  7.     count_max: Math.log(<MTTags limit="1" sort_by="count" sort_order="descend"><$MTTagCount$></MTTags>),// 最大タグ数(自然対数仕様)
  8.  
  9.     init: function() {
  10.         var tags = new Array();
  11.         var now = (new Date()).getTime();
  12.         var tagsNode = document.getElementById('tags');
  13.         var childNodes = tagsNode.childNodes;
  14.  
  15.         this.font_size_min /= this.weight;
  16.         this.font_size_max /= this.weight;
  17.  
  18.         for (var i = 0;i < childNodes.length;i++) {
  19.             var e = childNodes.item(i);
  20.  
  21.             if (e.nodeName.match(/li/i)) {
  22.                 var s = e.title.split(':');
  23.  
  24.                 var d = s[2].split('-');
  25.                 var diff = (now - (new Date(d[0], d[1] - 1, d[2])).getTime()) / 86400000;
  26.  
  27.                 e.style.fontSize = this.calc_fontsize(s[1]) + 'px';
  28.  
  29.                 if (diff < 15) {
  30.                     e.className = 'rank_1';/* ~ 15日*/
  31.                 }
  32.                 else if (diff < 30) {
  33.                     e.className = 'rank_2';/* 15日~ 30日*/
  34.                 }
  35.                 else if (diff < 90) {
  36.                     e.className = 'rank_3';/* 30日~ 90日*/
  37.                 }
  38.                 else if (diff < 180) {
  39.                     e.className = 'rank_4';/* 90日~180日*/
  40.                 }
  41.                 else if (diff < 365) {
  42.                     e.className = 'rank_5';/* 180日~365日*/
  43.                 }
  44.                 else if (diff >= 365) {
  45.                     e.className = 'rank_6';/* 365日~ */
  46.                 }
  47.  
  48.  
  49.                 tags.push([e, s[1]]);
  50.             }
  51.         }
  52.  
  53.         tagsNode.style.display = 'block';
  54.     },
  55.  
  56.     calc_fontsize: function (count) {
  57.         count = Math.log(count);// 自然対数仕様
  58.         return (this.font_size_max - this.font_size_min) * (count - this.count_min) / (this.count_max - this.count_min) + this.font_size_min;
  59.     }
  60. };

JavaScript の Math.log 関数を使用しています。
タグクラウドの表示は以下の通りです。

  1. <ul id="tags" class="tag_list">
  2.     <MTTags sort_by="modified_on" sort_order="ascend">
  3.     <li title="<$MTTagName$>:<$MTTagCount$>:<$MTTagLastUpdated format="%Y-%m-%d"$>"><a href="<$MTTagSearchLink$>&amp;IncludeBlogs=<$MTBlogID$>" rel="tag"><$MTTagName$></a></li>
  4.     </MTTags>
  5. </ul>
  6.  
  7. <script type="text/javascript">
  8. tagclouds.weight = <MTIf name="tag_fontweight"><$MTGetVar name="tag_fontweight"$><MTElse>2</MTIf>;
  9. tagclouds.init();
  10. </script>

後は再構築するだけぇ (●>∀<●)/

わたしのサイトではタグクラウドページとサイドバーに表示してる最近のタグとで併用してますので、サイドバーに表示する際には基準となるフォント最小/最大サイズを半分にして表示させてます。

それをやってるのが tagclouds.weight になります。 また、以下は使用前、使用後のイメージです。違いは明らかですね ( ̄∇ ̄)b
いい感じです (●´∀`●)

対数関数仕様版タグクラウド

後ほど、配布してますテンプレートでもフィードバックしたいと思います。
フィードバックしました (●>∀<●)

 Trackback Pings(0)

No trackbacks found.

 Comments(0)

No comments found.

 Post a Comment

 

コメント用フィード