Tag cloud

Un tag cloud es una nube de etiquetas ordenadas y con diferente tamaño según su relevancia

Un tag cloud (nube de etiquetas) es un conjunto de palabras clave ordenadas normalmente alfabéticamente y cada una con distinto tamaño según su relevancia.

Veamos en este tutorial como crear uno. Para ello necesitamos una tabla en nuestra base de datos con una columna que sea el nombre de la etiqueta y otra que contenga el valor que le da relevancia.

<?php
  $link = mysql_connect('server', 'username', 'password');
  if (!$link) {
    die('No se puede conectar: ' . mysql_error());
  }

$db_selected = mysql_select_db('bdname', $link);
  if (!$db_selected) {
    die ('No se puede conectar: ' . mysql_error());
  }

Especificamos el tamaño máximo y mínimo de la fuente en pixels

$tamano_maximo = 40;
$tamano_minimo = 9;

Hacemos la consulta a la base de datos teniendo en cuenta que nombre es cada etiqueta que aparecerá dentro del tag cloud, descargas es el valor que le da relevancia a cada etiqueta (en este caso cada etiqueta tendrá tamaño distinto según el número de descargas que tenga, éste es nuestro caso inventado hay muchas maneras de darle relevancia a un item)

$query = "SELECT nombre AS etiqueta, descargas AS cantidad FROM tabla ORDER BY nombre ASC";
$resultado = mysql_query($query);

Ponemos cada valor dentro de un array $etiquetas para poder ordenar todas las filas devueltas de la consulta.

while ($fila = mysql_fetch_array($resultado)) {
  $etiquetas[$fila['etiqueta']] = $fila['cantidad'];
}

De todos los valores de $etiquetas obtenemos los valores con mayor y menor cantidad

$mayor_cantidad = max(array_values($etiquetas));
$menor_cantidad = min(array_values($etiquetas));

Creamos un rango de valores

$rango = $mayor_cantidad - $menor_cantidad;
if (0 == $rango) {
 $rango = 1;
}

Determinamos que incremento de tamaño habrá según los tamaños en pixels y el rango de valores

$incremento = ($tamano_maximo - $tamano_minimo)/($rango);

Navegamos por toda la array para calcular el tamaño de la fuente, restando en nuestro caso el número de descargas de la fila actual menos el número de descargas de la fila con menos descargas y lo multiplicamos por el incremento, y finalmente le sumamos el tamaño mínimo que hemos establecido al principio.

foreach ($etiquetas as $clave => $valor) {
  $tamano = $tamano_minimo + (($valor - $menor_cantidad) \* $incremento);
  echo " <a href=\"http://\" style=\"font-size: ".$tamano."\">".$clave."</a> ";
}
mysql_close($link);
?>