> Manuales > Nubes de etiquetas en PHP

Mejoramos la nube de etiquetas creándola con enlaces a otras páginas.

Esta vez vamos a terminar de mejorar la nube creando enlaces en los nombres de las etiquetas.

Para ello vamos a necesitar las mismas tablas que utilizamos en el artículo anterior y fijándonos en que utilizaremos el nombre lógico para crear la url del enlace.

Aquí vamos a tener que crear otro array asociativo con los datos que necesitamos para crear el enlace, es decir, el nombre de la etiqueta y el nombre lógico. Para ello tendremos que hacer otra nueva consulta a la base de datos con los datos de cada etiqueta.

El código quedaría de la siguiente forma:

$ssql_etiquetas="select nombre_etiqueta, etiqueta.id_etiqueta from etiqueta, articulo, articulo_etiqueta where etiqueta.id_etiqueta=articulo_etiqueta.id_etiqueta and articulo.id_articulo=articulo_etiqueta.id_articulo";
}
$rs_etiquetas=mysql_query($ssql_etiquetas);
//Creo un array para meter los datos de las etiquetas
$etiquetas = array();
//Para cada etiqueta averiguo cuantas veces aparece en los articulos
while($fila_etiquetas=mysql_fetch_object($rs_etiquetas)){
   $ssql_cuantos="select count(id_etiqueta) as cuantos from breve_etiqueta where id_etiqueta=".$fila_etiquetas->id_etiqueta." order by cuantos desc ";
   $rs_cuantos=mysql_query($ssql_cuantos);
   $fila_cuantos=mysql_fetch_object($rs_cuantos);
   //Voy creando el array asociativo
   $etiquetas[$fila_etiquetas->nombre_etiqueta]=$fila_cuantos->cuantos;
   //A su vez creamos otro array donde meteremos otro con los datos que necesitamos para crear lso enlaces
   $ssql_datos="select * from etiqueta where id_etiqueta=".$fila_etiquetas->id_etiqueta;
   $rs_datos=mysql_query($ssql_datos);
   $fila_datos=mysql_fetch_object($rs_datos);
   $ids[$fila_etiquetas->nombre_etiqueta]=$fila_datos->nombre_logico;
}


Con esto ya tendríamos los dos arrays que necesitamos creados, ahora tenemos que modifcar la función nube_etiquetas que tenemos en el articulo inicial de nubes de etiquetas (enlace al articulo código php de la nubes de etiquetas)

La única modificación que tenemos que hacer es cambiar la línea que muestra la etiqueta.

echo $nombreetiqueta;

por la siguiente línea:

echo '<a href="http://www.dominio.com/etiquetas/'.$ids[$nombreetiqueta].'.html">'.$nombreetiqueta.'</a>';

Pero claro no se nos puede olvidar añadir como variable a la función en nuevo array que hemos creado.

El código de la función seria el siguiente:

function nube_etiquetas($etiquetas,$ids){
//saco los valores máximo y minimo de la apariciones de etiquetas
$valor_max = max($etiquetas);
$valor_min = min($etiquetas);
$diferencia = $valor_max - $valor_min;

//ordeno el array
ksort($etiquetas);

//creo la capa donde se van a mostrar las etiquetas
echo '<div class="nube">';
echo '<div class="etiquetas">';

foreach ($etiquetas as $nombreetiqueta=>$apariciones){
   
    //echo $nombreetiqueta;
//calculo un valor de 0 a 10 para cada etiqueta, porcentualmente según valores máximos y mínimos encontrados
$valor_relativo = round((($apariciones - $valor_min) / $diferencia) * 10);
//escribo las etiquetas con su estilo dependiendo del valor porcentual
echo "<span class='etiquetatam$valor_relativo'>";
echo '<a href="http://www.dominio.com/etiquetas/'.$ids[$nombreetiqueta].'.html">'.$nombreetiqueta.'</a>';

    echo "</span> ";
}
//meto una capa sin float para que tome todo el alto de las etiquetas
echo "<div style='clear:both'></div>";
//cierro la nube y las etiquetas
echo '</div>';
echo '</div>';
}


Y bueno solo nos quedaría recordar que cuando llames a la función tienes que pasarle los dos arrays.

nube_etiquetas($etiquetas,$ids);

Con la llamada terminamos los pasos a seguir para crear una completa nube de etiquetas en PHP.

Sara Alvarez

Equipo DesarrolloWeb.com

Manual