タグクラウドポートレットの作成

タグクラウド は、各タグの人気の高さを示唆する視覚効果とともに、記事のタグの一覧を表示するものです。

1. TagCloudクラスの作成

TagCloud クラスを /wwwroot/blog/protected/components/TagCloud.php ファイルとして 作成します。このファイルは以下のとおりです。

Yii::import('zii.widgets.CPortlet');
 
class TagCloud extends CPortlet
{
    public $title='Tags';
    public $maxTags=20;
 
    protected function renderContent()
    {
        $tags=Tag::model()->findTagWeights($this->maxTags);
 
        foreach($tags as $tag=>$weight)
        {
            $link=CHtml::link(CHtml::encode($tag), array('post/index','tag'=>$tag));
            echo CHtml::tag('span', array(
                'class'=>'tag',
                'style'=>"font-size:{$weight}pt",
            ), $link)."\n";
        }
    }
}

UserMenu ポートレットと異り、TagCloud ポートレットはビューを使用しません。 その代わり、その表現は renderContent() メソッドで行われます。 これは表現が、あまり多くの HTML タグを含まないためです。

それぞれのタグは、記事のインデクスページへのハイパーリンク (対応するタグをパラメータとして持ちます) として表示されます。 各タグのリンクのフォントサイズは、他のタグとの相対的な重みにより調整されます。 もしあるタグがより頻繁に記事に表れるなら、そのフォントサイズはより大きくなります。

2. TagCloud ポートレットの使用

TagCloud ポートレットの使用はとても単純です。 レイアウトファイル /wwwroot/blog/protected/views/layouts/column2.php を以下のように修正します。

......
<div id="sidebar">
 
    <?php if(!Yii::app()->user->isGuest) $this->widget('UserMenu'); ?>
 
    <?php $this->widget('TagCloud', array(
        'maxTags'=>Yii::app()->params['tagCloudCount'],
    )); ?>
 
</div>
......
$Id$

Be the first person to leave a comment

Please to leave your comment.