Symfony Tag cloud helper

This is a simple helper to create a tag cloud from an array of tags.

Creating a tag cloud is as easy as calling the helper:

<?php
use_helper('Tagcloud');
TagcloudHelper::showCloud($tags);
 

Where tags is an array that is defined in the following syntax:

  array('tag1' => 10, 'tag2' => 15, 'tag3' => 4); 
 

The values in this array are deciding the weight of your tag. It's usually the amount of posts that have this tag, but could also be determined in your own way. As long as the passed array has this syntax, your tag cloud will be built.

This tagcloud will use a piece of css that must be present in your css file:

.cloud_xsmall {
font-size
: 80%;
}

.cloud_small
{
font-size
: 100%;
}

.cloud_medium
{
font-size
: 120%;
}

.cloud_large
{
font-size
: 140%;
}

.cloud_xlarge
{
font-size
: 160%;
}


 

Obviously, this piece of css can easily be adapted to suit your needs.

Be sure that there is a route in your routing.yml that can handle the url /tag/:tag

The actual Helper:

<?php

class TagcloudHelper
{

/**
* Generate the tag array and echo the cloud
*
* @return array
*
*/
public function showCloud($tags) {
asort($tags);
reset($tags);
$this->smallest = current($tags);
end($tags);
$this->largest = current($tags);
$diff = $this->largest - $this->smallest;
$this->interval = round($diff/3);

reset($this->tags);

$this->cloud_tags = array();
foreach($this->tags as $tag => $amount) {
echo link_to($tag, 'tag/' . urlencode($tag), array('class' => $this->getSize($amount))) . ' ';
}
}

/**
* Get the size (css class) based on the amount
*
* @param integer $amount
* @return array
*/
private function getSize($amount) {
if ($amount == $this->smallest) {
return 'cloud_xsmall';
}
if ($amount == $this->largest) {
return 'cloud_xlarge';
}
if ($amount > $this->smallest + (2*$this->interval)) {
return 'cloud_large';
}
if ($amount > $this->smallest + $this->interval) {
return 'cloud_medium';
}
return 'cloud_small';
}

}

 

by Stefan Koopmanschap

 

From: http://snippets.symfony-project.org/snippet/240

posted @ 2011-12-13 18:19  Lux.Y  阅读(576)  评论(0编辑  收藏  举报