Вход Регистрация
Файл: base-sys/base/components/tag_cloud.php
Строк: 123
<?php

class BASE_CMP_TagCloud extends PEEP_Component
{
    
/**
     * @var string
     */
    
protected $url;
    
/**
     * @var string
     */
    
protected $routeName;
    
/**
     * @var array
     */
    
protected $tagList;
    
/**
     * @var BOL_TagService
     */
    
protected $service;

    
/**
     * Constructor.
     *
     * @param array<count,label> $tagList
     *
     */
    
public function __construct( array $tagList null$url null )
    {
        
parent::__construct();

        
$this->tagList $tagList;
        
$this->url $url;
        
$this->service BOL_TagService::getInstance();
    }

    
/**
     * Sets route name for tag items.
     * Route should be added to router and contain var - `tag`.
     *
     * @param string $routeName
     * @return BASE_CMP_TagCloud
     */
    
public function setRouteName$routeName )
    {
        
$this->routeName trim($routeName);
        return 
$this;
    }

    
/**
     * @return string
     */
    
public function getRouteName()
    {
        return 
$this->routeName;
    }

    
/**
     * @return string
     */
    
public function getUrl()
    {
        return 
$this->url;
    }

    
/**
     * @param string $url
     */
    
public function setUrl$url )
    {
        
$this->url $url;
    }

    
/**
     * @return array
     */
    
public function getTagList()
    {
        return 
$this->tagList;
    }

    
/**
     * @param array $tagList
     */
    
public function setTagList$tagList )
    {
        
$this->tagList $tagList;
    }

    
/**
     * @see PEEP_Rendarable::onBeforeRender
     */
    
public function onBeforeRender()
    {
        if ( 
$this->url === null && $this->routeName === null )
        {
            throw new 
LogicException();
        }

        
// get font sizes from configs
        
$minFontSize $this->service->getConfig(BOL_TagService::CONFIG_MIN_FONT_SIZE);
        
$maxFontSize $this->service->getConfig(BOL_TagService::CONFIG_MAX_FONT_SIZE);

        
// get min and max tag's items count
        
$minCount null;
        
$maxCount null;

        if ( !
$this->tagList )
        {
            
$this->setVisible(false);
            return;
        }

        foreach ( 
$this->tagList as $tag )
        {
            if ( 
$minCount === null )
            {
                
$minCount = (int) $tag['count'];
                
$maxCount = (int) $tag['count'];
            }

            if ( (int) 
$tag['count'] < $minCount )
            {
                
$minCount = (int) $tag['count'];
            }

            if ( (int) 
$tag['count'] > $maxCount )
            {
                
$maxCount = (int) $tag['count'];
            }
        }

        
$tags = array();

        
// prepare array to assign
        
$list = empty($this->tagList) ? array() : $this->tagList;

        foreach ( 
$list as $key => $value )
        {
            if ( 
$value['label'] === null )
            {
                continue;
            }

            
$tags[$key]['url'] = ($this->routeName === null) ? PEEP::getRequest()->buildUrlQueryString($this->url, array('tag' => $value['label'])) : PEEP::getRouter()->urlForRoute($this->routeName, array('tag' => $value['label']));

            
$fontSize = ($maxCount === $minCount ? ($maxFontSize 2) : floor(((int) $value['count'] - $minCount) / ($maxCount $minCount) * ($maxFontSize $minFontSize) + $minFontSize));

            
$tags[$key]['size'] = $fontSize;
            
$tags[$key]['lineHeight'] = $fontSize 4;
            
$tags[$key]['label'] = $value['label'];
        }

        
$this->assign('tags'$tags);
    }
}
Онлайн: 1
Реклама