Создание портлета облака тегов

Облако тегов отображает список тегов записей с визуальным оформлением, показывающим популярность каждого тега.

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";
        }
    }
}

Портлет TagCloud, в отличие от портлета UserMenu, не использует отображение. Вместо этого его внешний вид формирует метод 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>
…

Be the first person to leave a comment

Please to leave your comment.