no-image

Shomaさんが作ったHTML_TagCloudを使ってみた

PEAR HTML_TagCloud Package Draft Proposal!にあるように、ShomaさんがPEARにHTML_TagCloudを作って投稿したようなので早速使ってみました.

使いかたは、name,count,url,timestampをキーにした連想配列を作って、addElement(一括で入れる場合はaddElements)したあとに、buildAllを実行することでCSSとHTMLが生成されます。CSSとHTMLをばらばらにつくりたいばあいはbuildCSSでCSSが。buildHTMLでHTMLを作ることができるようになっています。

早速この日記のサイドバーに使えるようなSmartyPluginを作ってみました。Anubis使ってる人にしか意味のないコードですが1%くらいは参考になるかもということで晒しておきます。


    function tag_cloud()
    {
        require_once 'HTML/TagCloud.php';
        $Controller =& Ethna_Controller::getInstance();
        $Backend = $Controller->getBackend();
        $DB = $Backend->getDB();
        $Config = $Backend->getConfig();
        $categories = $DB->getCategories(true);
        $tags = array();
        foreach ($categories as $category) {
            $articles = $DB->getTitlesFromCategoryCode($category['code']);
            $end_article = end($articles);
            $tags[$category['code']]['name'] = $category['name'];
            $tags[$category['code']]['count'] = count($articles);
            $tags[$category['code']]['timestamp'] = $end_article['date'];
            $tags[$category['code']]['url'] = $Config->get('base_url') . '/blog_log/' . $category['code'];
        }
        $tagcloud = new HTML_TagCloud();
        $tagcloud->addElements($tags);
        $css = $tagcloud->buildCSS();
        $css = '<style type="text/css">' . "n" . $css . "</style>n";
        $css = str_replace(';}', ' !important; font-size: inherit !important;}', $css);
        $css = str_replace('.tagcloud', 'div.tagcloud', $css);
        $html = $tagcloud->buildHTML();
        $html = str_replace('px"><a', 'px !important;"><a', $html);
        print($css);
        print($html);
    }

素のHTMLに表示させるときは問題ないけれど、すでにデカいCSSがついてる所に表示するにはいろんな所を置換しないとダメでたいへんでした、、