PHP - Hacer un TagCloud

   
Vista:

Hacer un TagCloud

Publicado por Miguel (4 intervenciones) el 19/09/2007 12:34:07
Buenas tardes a todos.

Quería plantear una pregunta ya que llevo un tiempo iniciándome en la programación php, pero no doy con esto.

La cuestión es que he creado un blog, pero a la hora de mostrar las tags no logro hacer que figuren las más visitadas en distintos tamaños, tal y como está ahora en los portales de moda.

Las tags las tengo agrupadas en una tabla con dos columnas, ID que corresponde al ID de las noticias (en otra tabla) y TAG, que corresponde a la tag asignada. Al incluir las tags en cada noticia van apareciendo en esa columna junto con el ID correspondiente, por lo que se podría hacer una consulta para ver las veces que se repite cada TAG y mostrarla de un tamaño u otro según las veces que se repita... pero sinceramente no se exponer el código.

Ahora mismo tan solo las muestro mediante un for(....), por lo que aparecen todas con el mismo tamaño de fuente.

¿Alguien puede echarme un cable?

Gracias por adelantado.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Hacer un TagCloud

Publicado por Nicolás (154 intervenciones) el 19/09/2007 13:52:10
Para obtener las tags y la cantidad de veces que aparecen, debes utilizar la siguiente consulta:

SELECT tag, COUNT(*) FROM tags GROUP BY tag

luego puedes hacer:

<?php
// OBTIENES LA CANTIDAD DE REGISTROS PARA CALCULAR LOS TAMAÑOS
$cantidad_total_tags = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS cantidad FROM tags"));
$cantidad_total_tags = $cantidad_total_tags['cantidad'];
// DEFINES EL TAMAÑO MAXIMO Y MINIMO PARA LOS TAGS QUE MOSTRARÁS
$tamano_maximo = 32;
$tamano_minimo = 12;
// DEFINES LA CANTIDAD DE TAGS QUE QUIERES MOSTRAR
$tags_cantidad = 20;

$tags = mysql_query("SELECT tag, COUNT(*) AS cantidad FROM tags GROUP BY tag LIMIT $tags_cantidad");

// RECORRES LOS TAGS Y LOS MUESTRAS
while ($tag = mysql_fetch_array($tags)) {
$tamanio = round(12 + (($tamano_maximo - $tamano_minimo) * ($tag['cantidad'] / $cantidad_total_tags)));
echo "<span style=\"font-size:".$tamano."px\">".$tag['tag']."</span> ";
}

?>

Es probable que tenga errores pues no lo he probado, pero lo importante es que entiendas la idea. Nos avisas si te ha servido.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Hacer un TagCloud

Publicado por Miguel (4 intervenciones) el 19/09/2007 16:51:01
Hola Nicolás,

En primer lugar quiero agradecerte que te hayas tomado la molestia de explicarme este problemilla que tengo.

Comprendo la idea que me has expuesto, pero aun así he estado probando un par de horas y no me funciona... se muestran las tags correctamente pero con el mismo tamaño de fuente, parece no funcionar la variable que define las veces que se repite cada tag puesto que no devuelve ningún valor. Si no me equivoco debería ser $tag['cantidad']

Así es como tengo puesto el código que me has facilitado:

<?php
// OBTIENES LA CANTIDAD DE REGISTROS PARA CALCULAR LOS TAMAÑOS

$cantidad_total_tags = mysql_fetch_array(mysql_query("SELECT COUNT(*) AS cantidad FROM tags"));
$cantidad_total_tags = $cantidad_total_tags['cantidad'];

// DEFINES EL TAMAÑO MAXIMO Y MINIMO PARA LOS TAGS QUE MOSTRARÁS

$tamano_maximo = 32;
$tamano_minimo = 12;

// DEFINES LA CANTIDAD DE TAGS QUE QUIERES MOSTRAR

$tags_cantidad = 20;

$tags = mysql_query("SELECT nometag, COUNT(*) AS cantidad FROM tags GROUP BY nometag order by rand() LIMIT $tags_cantidad");

// RECORRES LOS TAGS Y LOS MUESTRAS

while ($tag = mysql_fetch_array($tags)) {
$tamano = round(12 + (($tamano_maximo - $tamano_minimo) * ($tag['cantidad'] / $cantidad_total_tags)));
echo "<span style=\"font-size:".$tamano."px\">".$tag['nometag']."</span> ";
}

?>

Gracias nuevamente por adelantado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Hacer un TagCloud

Publicado por Nicolás (154 intervenciones) el 19/09/2007 18:06:50
Supongo que tu tabla se llama "tags"... no?
Prueba poner

<span style=\"font-size:".$tamano."px;\">

(es decir, un punto y coma despues de "px")

y si eso no anda, muestranos que resultado (el codigo fuente) te da la ejecucion de esto... especificamente el valor final de la variable "$tamano" para ver si escribe correctamente el font-size.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Hacer un TagCloud

Publicado por Miguel (4 intervenciones) el 19/09/2007 18:25:59
Ya he visto lo que fallaba, parece ser que en lugar de

$tags = mysql_query("SELECT DISTINCT(nometag), COUNT(*) AS cantidad FROM tags GROUP BY nometag order by rand() LIMIT $tags_cantidad");

tenía que poner

$tags = mysql_query("SELECT DISTINCT(nometag), COUNT(nometag) AS cantidad FROM tags GROUP BY nometag order by rand() LIMIT $tags_cantidad");

porque así ahora me funciona perfectamente. El problema era que $tag['cantidad'] no devolvía nada, pero ahora devuelve el número de repeticiones perfectamente.


Mil gracias por tu ayuda Nicolás, si no es por tí en la vida lo saco, ya que no sabía como plantearlo... habrá que continuar estudiando jeje.

Un saludo y gracias!!

Miguel
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Hacer un TagCloud

Publicado por Nicolás (154 intervenciones) el 19/09/2007 19:23:37
Y yo me voy a tener que poner a estudias SQL! jejejeje.
Un abrazo y cualquier duda, no dudes en consultar. Aquí simpre habrá alguien dispuesto a dar una mano.
Suerte
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar