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

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

Создание класса 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.

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

Использование портлета TagCloud #

Использовать портлет TagCloud очень просто. Мы изменяем файл макета /wwwroot/blog/protected/views/layouts/column2.php следующим образом:


<div id="sidebar">

    <?
php if(!Yii::app()->user->isGuest$this->widget('UserMenu'); ?>

     $this->widget('TagCloud', array(
        
'maxTags'=>Yii::app()->params['tagCloudCount'],
    )); 
?>

</div>

Зачем реклама?