0 关注者

创建标签云Portlet

标签云显示帖子标签列表,并使用视觉装饰来暗示每个标签的流行程度。

1. 创建TagCloud

我们在文件/wwwroot/blog/protected/components/TagCloud.php中创建TagCloud类。该文件内容如下

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 portlet不同,TagCloud portlet不使用视图。相反,它的呈现是在renderContent()方法中完成的。这是因为呈现不包含很多HTML标签。

我们将每个标签显示为指向帖子索引页面的超链接,并带有相应的标签参数。每个标签链接的字体大小根据它们在其他标签中的相对权重进行调整。如果某个标签的频率值高于其他标签,则其字体大小会更大。

2. 使用TagCloud Portlet

TagCloud portlet的使用非常简单。我们修改布局文件/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>
......

发现错别字或您认为此页面需要改进?
在github上编辑它 !