巷では
Ajax 云々が大人気です。あの
Google Maps も実のところ、
Ajax のコアを成す
JavaScript を使ってあれだけのことを実現しています。FLASH に頼らずに
ブラウザだけで完結しているのは本当に驚きですね。
JavaScript もまだまだ捨てたものじゃないという優れたお手本だと思います。
さて、記事分類の新たな切り口として先日、本サイトにも導入してみた TagCloud ですが、JavaScript の実力にビックリしたことを糧に、
今回、これを JavaScript を用いてパワーアップしてみました。Google Maps には遠く遠く及びもしませんでしたが、その一部を真似てスライダコントロールモドキを導入し、また、タグのソート順を自由に切り替えられるようにもしてみました。
TagCloud
タグによる folksonomy の実現には、
Ogawa::Memorandaで公開されている
Tagwire Pluginを使用しています。
また、TagCloud の生成は、
TagwireでTagCloudのコードを
大変に参考にさせて頂きました。
コードの本質部分はほとんど同じになっています。
有用な
プラグインを開発・公開されている
ogawa さんに感謝を m(_ _)m
以下に独自の改造を紹介しながら説明していますので、
本サイトの TagCloudを参照されながら読んで頂くと判りやすいかと思います。
フォントサイズの調整
タグの使用回数からフォントサイズを求める計算式を変更しています。
記事が増えて
ブログ全体のタグの使用回数が増えてくると、
オリジナルのコードαではフォントサイズが上限なく大きくなります。
改造後のコードβではタグの使用回数の最大値と最小値を基にして、
使用頻度が最も少ないタグのフォントサイズを size_min に、
使用頻度が最も多いタグのフォントサイズを size_max に線形補間しています。
これにより、
ブログ全体のタグの使用回数の多寡に関わらず、
ダイナミックに変化する TagCloud を生成することができます。
カットオフ値による表示・非表示についても、同じ原理で正規化された出現回数を基に判定しています。
今は単純に線形補間としていますが、タグの使用頻度の分布まで考えた方がモア・ベター
ソート順の切り替え
タグのソート順をボタン一発で変更できるようにしてみました。
今のところ"辞書順","更新日順","使用頻度順"によるソート切替えが可能です。
使用頻度順ソートについては、カットオフ値による表示・非表示切替えがあるので、
効果のほどはイマイチかもしれません。
切替えボタンの
onclick ハンドラで所望の TagCloud を表示し、
それ以外を非表示にしています。単純。
更新日でソート
オリジナルの
Tagwire Pluginでは、
タグを使用頻度と辞書順でしかソートできません。
今回、更新日によるソートにも対応したかったので、
プラグインも少し改造してあります。
tagwire.pl の
tags サブルーチン中に以下の部分を追加します。
これにより
sort_by="date" オプションで、タグが登録された記事の更新日でソートが行えます。
また、他同様 sort_order による昇順/降順指定もそのまま有効です。
スライダコントロール
タグの使用頻度に応じてタグの表示・非表示を切り替えることができますが、
この部分を
Google Maps で使われている左端のズームコントローラを真似て(というか見た目そのまんま)
スライダコントロール風にしてみました。
ブラウザによってイベントハンドラの登録方法が異なるようで、
全てのブラウザについて動作の保証が取れていません。
特にスライダ部分の動作が大きくことなるようです
(Netscape7.1…動作、FireFox…動作、IE6.0…一部動作、Opera…全くダメ)
うぁ〜…手間だなぁ(´・ω・`)
ソース
TagCloud ページのインデックスアーカイブ
テンプレートから抜粋を示します。
JavaScript の後半部分はスライダコントロール関連のコードです。
IEとOperaでは一部(または全部)で不具合が出ているので修正の必要があります
('05/09/26 追記)
寄せられたコメント (最新 5 件を表示しています)
ご指摘ありがとうございましたm(_ _)m
説明文はMT標準のタグ機能に倣うように書いているんですが,
タグ機能はOgawa::memorandaのTagwireプラグインを未だに使っているために,
説明と実際が違うことがよくあるんですよ…(直せよ
MTは下位互換性についてはかなり善処している方だと思いますが,
やっぱり未だに移行できない部分というのもあるもんです。
おはようございます^^
記事の方興味深く読ませてもらいました。
記事内の count_min、count_max にセットする最少数、最大数取得のところを、lastn ではなく limit にしたら正しく表示されました (; ̄∇ ̄A
タブのドラッグが不調だったので外しましたorz