0 follower

Створення портлета хмари тегів

Хмара тегів відображає список тегів записів із візуальним оформленням, що показує популярність кожного тега.

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>
…

Found a typo or you think this page needs improvement?
Edit it on github !