TagwireでTagCloud
Tagwire Pluginでは、ブログで使用しているすべてのタグをリスティングする機能を持ちます。また、その際にタグの名前以外にタグの使用個数、タグの最終利用時刻を取得することができます。
したがって、タグの一覧を表示する際に使用頻度に応じてサイズを変更するとか、タグの最終利用時刻に応じて濃淡を変更するとか、当然ですがそういうことは普通にできます。search.cpan.org: HTML::TagCloud - Generate An HTML Tag Cloudに食わせる用のデータを作るもよし、タグデータと表示用の処理を含むJavascriptを生成するのもよし、タグデータXMLを生成してえーじゃっくすでほげほげするもよし、まあ好きなように使えます。
ここでは私のTagCloudのページ(Ogawa::Memoranda Tags)のテンプレート(抜粋)を貼り付けておきます。ときどきソースをくださいと言われるので。少し変更すればTags Pluginなどにも転用できます。
<style type="text/css">
ul#tags { border: 1px solid #CCC; padding: 10px; margin: 10px; display: none; }
#tags li { display: inline; }
#tags li a { border-width: 0; color: #000; }
#tags li.hot a { color: #00F; }
#tags li.old a { color: #777; }
#tags li.oldest a { color: #CCC; }
#tags li a:active, #tags li a:hover { color: #6C3; }
.coffButton { color: #000; background: #fff; border: 1px solid #ccc;
padding: 2px; cursor: pointer; }
a.coffButton:hover { color: #000; background: #ccc; }
#coff { font-weight: bold; padding: 2px; }
</style>
<p>
Cutoff Parameter:
<a onclick="decCoff(5)" class="coffButton">-5</a>
<a onclick="decCoff(1)" class="coffButton">-1</a>
<a onclick="incCoff(1)" class="coffButton">+1</a>
<a onclick="incCoff(5)" class="coffButton">+5</a>
<span id="coff">0</span>
</p>
<ul id="tags">
<MTTags>
<li title="<$MTTag$>:<$MTTagCount$>:<$MTTagDate format="%Y-%m-%d"$>"><a
title="Tag: <$MTTag$>"
href="<$MTBlogURL$>tag/<$MTTag encode_url="1"$>"><$MTTag$></a></li>
</MTTags>
</ul>
<script type="text/javascript">
function calcFontSize(count) {
return count / 6 + 12;
}
var tags = new Array();
var now = (new Date()).getTime();
var tagsNode = document.getElementById('tags');
var childNodes = tagsNode.childNodes;
for (var i = 0; i < childNodes.length; i++) {
var e = childNodes.item(i);
if (e.nodeName.match(/li/i)) {
var s = e.title.split(':');
e.style.fontSize = calcFontSize(s[1]) + 'px';
var d = s[2].split('-');
var diff = (now - (new Date(d[0], d[1] - 1, d[2])).getTime()) / 86400000;
if (diff < 14) e.className = 'hot';
else if (diff > 365) e.className = 'oldest';
else if (diff > 60) e.className = 'old';
tags.push([ e, s[1] ]);
}
}
tagsNode.style.display = 'block';
var coff = 0;
var coffNode = document.getElementById('coff');
function decCoff(c) {
if (coff == 0) return;
coff -= c;
if (coff < 0) coff = 0;
coffNode.innerHTML = coff;
refreshCoff();
}
function incCoff(c) {
if (coff == 20) return;
coff += c;
if (coff > 20) coff = 20;
coffNode.innerHTML = coff;
refreshCoff();
}
function refreshCoff() {
for (var i = 0; i < tags.length; i++) {
var tag = tags[i];
tag[0].style.visibility = (tag[1] <= coff) ? "hidden" : "visible";
}
}
</script>
要はTagCloudに必要な情報をあらかじめ生成してタグをwrapしている要素のtitle属性に突っ込んでおき、Javascriptを使ってその情報を見た目に反映させています。ちなみにこの例では、使用頻度に応じてサイズを変更している他に、2週間以内に更新されたタグはブルーで、更新されてから60日以上経ったタグはグレーで、一年以上経ったタグはより薄いグレーで、それぞれ表示しています。
このエントリーのトラックバックURL: http://as-is.net/mt/mt-tb.cgi/297
Tagwire Plugin と JavaScript を使用させていただき、
おかげさまで私のサイトでも TagCloud を使えるようになりました。
カテゴリによる階層的分類では実現できなかったエントリ間の往来効果(?)に驚いています。
タグにこれほどの効果があったとは…
あと、当方で公開中の TagCloud では、JavaScript を少々変更して
タグの参照数の最大値:最小値を、任意のフォントサイズ範囲に線形補間し、
参照数が爆発して font-size: 100px; などとならないようにしてみました(^^;)
なるほどこれはcoolですね。真似させていただくかもしれません;-)
タグがものすごい勢いで増えていくのでもう少しうまいブラウズ方法はないものかと思うのですけれどね。
こんにちわ^^
いつも(o)さんの記事拝見させてもらっています。
以前、こちらの TagwireでTagCloud の記事を参考に、わたしのところでも TagCloud のページをなんどか作ることができました。
既に遅いですが、お礼のコメントと、トラバもさせていただきました。
今後も Ogawa::Memoranda の記事楽しみにしています。
では…。
カスタマイズ:小粋空間さんの「Tag Cloud のページを作る」の件
私も以前からタグクラウドを設置したく以前から悪戦苦闘しております。そこで、この記事を拝見して設置を試みているのですがどうしても不具合が生じて困っています。
Mozilla Firefox2.0では正常に表示するのですがIE6では、表示が崩れ各タグが表示されません。
ちなみにMT3.33を使用しておりますがこれが影響しているのでしょうか? MT3.33ではこのカスタマイズは使用できないのでしょうか? MT3.33には、標準でタグクラウド機能が装備されているようですができる限りこのカスタマイズを利用したいと思っています。
スタイルとしては、中央カラムにタグクラウドを表示させ各タグの検索結果を別に表示させたいと考えています(貴Blogのように)
現在カスタマイズの状況は、スタイルシートの記述を外すと文字は表示されます。スタイルシートを記述すると文字が表示されず
ナビゲーション部分が崩れます。
お初で大変恐縮ですがアドバイス頂けないでしょうか?恐れ入りますが宜しくお願いします。
※ちなみに現在、カスタマイズ中のタグクラウドのURLです。
http://vita.qee.jp/tags.php
いろいろなJavaScriptが組み込んであるようなので、もっとシンプルなページで動作確認してみたら、としかいいようがありません。
アドバイスありがとうございます! アドバイス頂いたようにしてなんとか解決しました。 また、お礼の方遅れましたけど
プラグイン使わせて頂いております ありがとございました。