Bueno ya habia escrito un post sobre como realizar dicha Nube de etiquetas, como bien saben los que son desarrolladores y visitan este sitio todos siempre queremos mejorar lo que ya se ha realizado, el dia de hoy en un momento de lucidez estuve investigando un poco sobre las estructuras de los Widgets de WordPress, por lo que me di una vuelta en el repositorio de SVN del mismo y por ahi me encontre una formula algo simpatica para hacer las Tag Clouds mas sencillas, asi que tomando la formula busque reimplementarla con el codigo que ya tenia hecho y el resultado fue el siguiente:
<style>
a
{
color: #0000FF;
word-spacing: 0;
text-indent: 0;
margin: 0
}
a:hover
{
color: red;
word-spacing: 0;
text-indent: 0;
margin: 0;
text-decoration: underline;
}
</style>
<div style="width:400px;">
<font face="verdana">
<?php
//Primero Conectarse a la DB
$host_mysql="localhost:3306";
$user_mysql="myuser";
$pass_mysql="mypass";
$base_mysql="mydb";
//Despues definimos el tamaño maximo y minimo para las etiquetas
//del Tag Cloud asi como la cantidad maxima de tags a desplegar
$fontmax=14;
$fontmin=6;
$tagmax=10;
//Si la variable no esta definida por default asigna 10 elementos
if ( $tagmax <= 0)
$tagmax = 10;
//Conexion a la base de datos
mysql_connect($host_mysql,$user_mysql,$pass_mysql);
mysql_select_db($base_mysql);
//Formamos la Consulta
// aqui es donde usamos la variable para limitar los resultados
$query ="SELECT etiqueta as tag,count(etiqueta) as quantity
FROM tbl_etiquetas
GROUP BY etiquetas LIMIT 0,$tagmax";
//Ejecutamos la Consulta
$result = mysql_query($query);
//hacemos un Ciclo y metemos todo en un Array
while ($row = mysql_fetch_array($result)) {
$tags[$row['tag']] = $row['quantity'];
}
//Cantidad de Elementos y sumatoria de todos los elementos
$max_qty = max(array_values($tags));
$universo = array_sum(array_values($tags));
//Ejemplos con formula de WordPress
$elemento_menor = min(array_values($tags));
$hoja = max(array_values($tags)) - $elemento_menor;
if ( $hoja <= 0)
$hoja = 1;
$letra_hoja = $fontmax - $fontmin;
if ( $letra_hoja <= 0)
$letra_hoja = 1;
$font_step = $letra_hoja / $hoja;
//Ahora si hacemos otro Ciclo para recorrer el
//Array comparar los Valores vs Porcentajes e Imprimimos el Tag
foreach ($tags as $key => $value) {
//Reinicializar Variables
$porcentaje=0;
//Calcular el Porcentaje Real
$porcentaje=($value/$universo)*100;
//Calculo
$tamanio=( $fontmin + ( ( $value - $elemento_menor ) * $font_step ) );
//Imprimimos el Tag
echo '<a href="cloud.php?seleccion='.$key.'" style="font-size: '.$tamanio.'pt"';
echo ' title="'.$value.' veces que se encontro este tag '.$key.'"';
echo '>'.$key.'</a> ';
}
//Cerramos la conexion a la base de datos ya que es importante
mysql_close();
?>
</font>
</div>
<p>
<?
$seleccion=isset($_REQUEST['seleccion'])?$_REQUEST['seleccion']:' ';
echo "Usted selecciono el Tag: $seleccion";
?>
</p>
Basicamente el codigo se ve un poco mas limpio, la formula que tome de Wordpress es un pequeño calculo matematico el cual permite en base a la cantidad de elementos establecer facilmente el tamaño del tag, le agregue una nada de CSS para que las etiquetas A no se vieran tan feonas y ademas encerre el resultado en un DIV para que estuvieran todos contenidos en un ancho de algunos pixelillos, a mi me resulto interesante jugar con esta formula ya que simplifico el codigo, esa es una de las grandes ventajas del OpenSource, puedes ver el codigo y si crees que es una idea interesante tomarla y reimplementarla, claro como todo en la comunidad OpenSource hay que compartir por eso actualize el articulo
Saludos
Dante