PerlのHTML::TagCloud::ExtendedのPHP版を作成し、PEARにProposalしてみました。(まだDraft。そしてまだ運用実績はありません。)
CPANにはExtendedじゃないのもあるのですが、Extendedのほうが時間経過を表現できたりして高機能です。
HTML::TagCloud::ExtendedがみごとなPerl OOしてたので、比較的容易に移植することができました。
ただホットタグ機能や設定用変数を渡すとこなど、いくつかの機能は移植しきれてません。
またtimestampの引数をはじめからUnixタイムスタンプにしたり、時間指定しなかった場合、latestとして扱うなど、いくつかの変更を加えています。
もうちょっとコードをきれいにして、コメント書いて、ドキュメント作って、Bugをとって、package.xmlをまとめて、PEARの色表現ルールにも対応して今月中にはPEPrフェーズに進みたいなぁ。package.xmlの書き方、わからん、とか思ってたら、渡りに船で上鍵さんが調査してるみたいだし。なんかいろいろ追い風が吹いているかんじです。
ソースコードはこちら。
サンプルコードはこんな感じです。
<?php
// $Id:$
require_once '../TagCloud.php';
$tags =& new HTML_TagCloud();
$tags->addElement('PHP','http://www.php.net', 39, strtotime(20060315000000));
$tags->addElement('XML','http://www.xml.org', 21, strtotime(20060515000000));
$tags->addElement('Perl','http://www.xml.org', 15, strtotime(20060215000000));
$tags->addElement('PEAR','http://pear.php.net', 32, strtotime(20060415000000));
$tags->addElement('MySQL','http://www.mysql.com', 10, strtotime(20060501000000));
$tags->addElement('PostgreSQL','http://pgsql.com', 6, strtotime(20051201000000));
print $tags->buildALL();
?>
タイムスタンプを省略したり、まとめて配列をそのまま渡せるようにもしてみた。
<?php
// $Id:$
require_once '../TagCloud.php';
$tags =& new HTML_TagCloud();
$name = 'a';
// set a item without timestamp
$tags->addElement($name, '#', 20);
foreach(range(0,10) as $i){
$arr[$i]['name'] = $name;
$arr[$i]['url'] = '#';
$arr[$i]['count'] = $i;
$name++;
}
// set many item at once
$tags->addElements($arr);
$css = $tags->buildCSS();
$taghtml = $tags->buildHTML();
?>
いや,勢いって大事ですな。
HTML::TagCloud::ExtendedのAUTHORであるLyo Katoさんに感謝。
これを作る機会になった某プロジェクトに感謝。