Criando tag nuvem com PHP

Uma Nuvem de Tags é uma representação visual de tags geradas pelos usuários. Essas tags são tipicamente mostradas em ordem alfabética e a frequencia é amostrada pelo tamanho da fonte e/ou cor. O conceito de Nuvem de Tags veio para ficar e é muito útil por ajudar o usuário a encontrar palavras-chave e a navegar em um site/blog.



Banco dados Tags Clouds

Crie um banco de dados com o nome tags para usar o exemplo, mas você pode relacionar com as tabelas no seu site que contém as categorias

CREATE TABLE `tags` (
  `id_tags` int(11) NOT NULL auto_increment,
  `tag` varchar(50) NOT NULL,
  PRIMARY KEY  (`id_tags`)
) ENGINE=InnoDB  DEFAULT CHARSET=latin1 AUTO_INCREMENT=8 ;



INSERT INTO `tags` (`id_tags`, `tag`) VALUES 
(1, 'xhtml'),
(2, 'css'),
(3, 'xhtml'),
(4, 'xhtml'),
(5, 'css'),
(7, 'ajax');

Gerando Tags Clouds

Esta é página que gera as tags nuvens, você pode alterar o css para fonte ou tamanho que você desejar.

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Tags</title>
<head>

<style type="text/css">
/*Formata as tags*/
.tagCloud_1{
         font-family:verdana,arial; font-size: xx-small; 
}
.tagCloud_2{ 
         font-family:verdana,arial; font-size: small; 
}
.tagCloud_3 { 
         font-family:verdana,arial; font-size: medium; 
}
.tagCloud_4 {
         font-family:verdana,arial; font-size: large; 
}
.tagCloud_5 { 
         font-family:verdana,arial; font-size: xx-large; 
}
</style>

</head>
<body>

<?php
// Cria a conecção à base de dados
$db = @mysql_connect('localhost','root','');
@mysql_select_db("tags",$db);
 
// Obtem a lista de tags e número de vezes que surge na tabela
$resTags = @mysql_query("SELECT COUNT(tag) AS tagCount, tag FROM tags GROUP BY tag");

	// Cria um array de tags
	if (@mysql_num_rows($resTags)) {
	 
	       while (list($count, $tag) = mysql_fetch_row($resTags)) 
	         $array[$tag] = $count;
			
	}
 
// Obtém a tag com o maior número de registos
$max = max($array);
// Obtém a tag com o menor número de registos
$min = min($array);
// Obtém a Aplitude dos registos e calcula a diferença entre as categorias
$distribution = ($max -$min) / 5; // Este número corresponde ao número de categorias da Tag Clouds
 
	// Cria a Lista de tags
	foreach ($array as $tag=>$count) {
	 
	    // Define a categoria da tag
	    if ($count == $min) { $class = "tagCloud_1"; }
	    elseif ($count == $max) { $class = "tagCloud_5"; }
	    elseif ($count > ($min + ($distribution * 2))) { $class = "tagCloud_4"; }
	    elseif ($count > ($min + $distribution)) { $class = "tagCloud_3"; }
	    else { $class = "tagCloud_2"; }
	 
	 
	    // Cria o hiperlink com a tag
	    echo '<a href="?links='.$tag.'" title="'.$count.' Tópicos" class="'.$class.'">'.$tag.'</a> '; 
	 }

?>

</body>
</html>