Foros del Web » Programando para Internet » PHP »

Sistema tag-cloud

Estas en el tema de Sistema tag-cloud en el foro de PHP en Foros del Web. Holas tengo este sistema de tag-cloud Tabla: Código PHP: CREATE TABLE  ` tags ` (   ` id_tag `  int ( 11 )  NOT NULL auto_increment ,   ` tag `  ...
  #1 (permalink)  
Antiguo 22/11/2007, 15:12
 
Fecha de Ingreso: mayo-2003
Mensajes: 92
Antigüedad: 20 años, 11 meses
Puntos: 0
Sistema tag-cloud

Holas

tengo este sistema de tag-cloud

Tabla:

Código PHP:
CREATE TABLE `tags` (
  `
id_tagint(11NOT NULL auto_increment,
  `
tagvarchar(100collate utf8_unicode_ci NOT NULL default '',
  `
relevanciaint(11NOT NULL default '0',
  
PRIMARY KEY  (`id_tag`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=57 
Funciones:
Código PHP:
function get_tag_data() { 
$result mysql_query("SELECT * FROM tags GROUP BY tag ORDER BY relevancia DESC"); 
while(
$row mysql_fetch_array($result)) { 
$arr[$row['tag']] = $row['relevancia'];

ksort($arr); 
return 
$arr
}

function 
get_tag_cloud() {

    
$min_font_size 10;
    
$max_font_size 20;

    
$tags get_tag_data();

    
$minimum_count min(array_values($tags));
    
$maximum_count max(array_values($tags));
    
$spread $maximum_count $minimum_count;

    if(
$spread == 0) {
        
$spread 1;
    }

    
$cloud_html '';
    
$cloud_tags = array(); 
    foreach (
$tags as $tag => $relevancia) {
        
$size $min_font_size + ($relevancia $minimum_count
            * (
$max_font_size $min_font_size) / $spread;
        
$cloud_tags[] = '<a style="font-size: 'floor($size) . 'px' 
            
'" class="tag_cloud" href="http://www.chemuska.com/search.php?swords=' $tag 
            
'" title="\'' $tag  '\' haz click para ver resultados">' 
            
htmlspecialchars(stripslashes($tag)) . '</a>';
    }
    
$cloud_html join("\n"$cloud_tags) . "\n";
    return 
$cloud_html;


Inprime las tags:

Código PHP:
print get_tag_cloud(); 

Hasta aqui fenomenal y me funciona muy bien, creo las tags en la db a traves de un formulario y les asigno una relevancia a cada tag de forma que aparezca con una fuente mas grande o mas pequeña

Ahora viene mi consulta y os agradeceria que ayudarais ya que no consigo hacer lo que os expongo...

En mi sitio tengo diferentes categorias y lo que quiero es asignar a cada tag el id de la categoria donde tiene que imprimirse, por supuesto conservando la relevancia de cada tag y demas funciones actuales

Os pongo la tabla de las categorias:

Código PHP:
CREATE TABLE `categories` (
  `
idint(11NOT NULL auto_increment,
  `
parentint(11) default NULL,
  `
titletext collate utf8_unicode_ci,
  `
pathtext collate utf8_unicode_ci,
  `
descriptiontext collate utf8_unicode_ci,
  `
keywordstext collate utf8_unicode_ci,
  `
datedate NOT NULL default '0000-00-00',
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=238 
Os agradeceria mucho una ayuda para mi es importante acabar este proyecto y ya no doy mas

Saludos
  #2 (permalink)  
Antiguo 22/11/2007, 15:28
 
Fecha de Ingreso: diciembre-2005
Mensajes: 105
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Sistema tag-cloud

Hola, tendrias que agregar una columna en la tabla de las tags especificando a que categoria esta asociada.... luego a la hora de listas tus categorias especificarias en la consulta WHERE categoria='$id_categoria' y solo te listaria las tags correspondientes a esa categoria.

Espero que se haya entendido, un saludo!
__________________
www.AdWebLink.com -> Buscas visitas para tu WEB? Agrega tu sitio Gratis!
www.agregaweb.com.ar -> Agrega tu sitio web al Directorio
  #3 (permalink)  
Antiguo 23/11/2007, 15:26
 
Fecha de Ingreso: mayo-2003
Mensajes: 92
Antigüedad: 20 años, 11 meses
Puntos: 0
Re: Sistema tag-cloud

Hola,.. he creado la tabla dentro de "tags" con el id de la categoria donde debe de imprimirse

Código PHP:
CREATE TABLE `tags` (
  `
id_tagint(11NOT NULL auto_increment,
  `
idint(11NOT NULL default '0',
  `
tagvarchar(100collate utf8_unicode_ci NOT NULL default '',
  `
relevanciaint(11NOT NULL default '0',
  
PRIMARY KEY  (`id_tag`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=57 
Ahora deberia de hacer la consulta aqui

Código PHP:
function get_tag_data() { 
$result mysql_query("SELECT * FROM tags GROUP BY tag ORDER BY relevancia DESC"); 
while(
$row mysql_fetch_array($result)) { 
$arr[$row['tag']] = $row['relevancia'];

ksort($arr); 
return 
$arr

a ver si me dais una manita
  #4 (permalink)  
Antiguo 24/11/2007, 09:54
 
Fecha de Ingreso: diciembre-2005
Mensajes: 105
Antigüedad: 18 años, 3 meses
Puntos: 0
Re: Sistema tag-cloud

Bueno.... me parece si no me equivoco que seria asi:
id suponiendo que es lo que agregaste para especificarle la categoria

Cita:
function get_tag_data() {
$result = mysql_query("SELECT * FROM tags WHERE id='$CATEGORIA' GROUP BY tag ORDER BY relevancia DESC");
while($row = mysql_fetch_array($result)) {
$arr[$row['tag']] = $row['relevancia'];
}
ksort($arr);
return $arr;
}
__________________
www.AdWebLink.com -> Buscas visitas para tu WEB? Agrega tu sitio Gratis!
www.agregaweb.com.ar -> Agrega tu sitio web al Directorio
  #5 (permalink)  
Antiguo 27/11/2007, 13:27
 
Fecha de Ingreso: mayo-2003
Mensajes: 92
Antigüedad: 20 años, 11 meses
Puntos: 0
Re: Sistema tag-cloud

Hola Compex, gracias por tu interes ,.. pero no va,.. (

Con esta consulta...

Código PHP:
function get_tag_data() {
$result mysql_query("SELECT * FROM tags WHERE id='$CATEGORIA' GROUP BY tag ORDER BY relevancia DESC");
while(
$row mysql_fetch_array($result)) {
$arr[$row['tag']] = $row['relevancia'];
}
ksort($arr);
return 
$arr;

Me tira estos errores,... ufffffffff

Código PHP:
Warningksort() expects parameter 1 to be array, null given in /home/chemuska/domains/chemuska.com/public_html/admin/functions.php on line 106

Warning
array_values() [function.array-values]: The argument should be an array in /home/chemuska/domains/chemuska.com/public_html/admin/functions.php on line 119

Warning
Wrong parameter count for min() in /home/chemuska/domains/chemuska.com/public_html/admin/functions.php on line 119

Warning
array_values() [function.array-values]: The argument should be an array in /home/chemuska/domains/chemuska.com/public_html/admin/functions.php on line 120

Warning
Wrong parameter count for max() in /home/chemuska/domains/chemuska.com/public_html/admin/functions.php on line 120

Warning
Invalid argument supplied for foreach() in /home/chemuska/domains/chemuska.com/public_html/admin/functions.php on line 129 

Voy a exponer el tema de nuevo,...

Tengo la tabla de "tags"

Código PHP:
CREATE TABLE `tags` (
  `
id_tagint(11NOT NULL auto_increment,
  `
tagvarchar(100collate utf8_unicode_ci NOT NULL default '',
  `
relevanciaint(11NOT NULL default '0',
  
PRIMARY KEY  (`id_tag`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=57 
las funciones

Código PHP:
function get_tag_data() { 
$result mysql_query("SELECT * FROM tags GROUP BY tag ORDER BY relevancia DESC"); 
while(
$row mysql_fetch_array($result)) { 
$arr[$row['tag']] = $row['relevancia'];

ksort($arr); 
return 
$arr
}

function 
get_tag_cloud() {

    
$min_font_size 10;
    
$max_font_size 20;

    
$tags get_tag_data();

    
$minimum_count min(array_values($tags));
    
$maximum_count max(array_values($tags));
    
$spread $maximum_count $minimum_count;

    if(
$spread == 0) {
        
$spread 1;
    }

    
$cloud_html '';
    
$cloud_tags = array(); 
    foreach (
$tags as $tag => $relevancia) {
        
$size $min_font_size + ($relevancia $minimum_count
            * (
$max_font_size $min_font_size) / $spread;
        
$cloud_tags[] = '<a style="font-size: 'floor($size) . 'px' 
            
'" class="tag_cloud" href="http://www.chemuska.com/search.php?swords=' $tag 
            
'" title="\'' $tag  '\' haz click para ver resultados">' 
            
htmlspecialchars(stripslashes($tag)) . '</a>';
    }
    
$cloud_html join("\n"$cloud_tags) . "\n";
    return 
$cloud_html;


,... todo esto funciona perfecto, se imprime cada tag con su correspondiente relevancia

ahora quiero hacer la consulta aqui

Código PHP:
function get_tag_data() { 
$result mysql_query("SELECT * FROM tags GROUP BY tag ORDER BY relevancia DESC"); 
while(
$row mysql_fetch_array($result)) { 
$arr[$row['tag']] = $row['relevancia'];

ksort($arr); 
return 
$arr

relacionando cada tag con una categoria,... para lo que añadi el campo "id" en la tabla de "tags" como me dijo Compex

Código PHP:
CREATE TABLE `tags` (
  `
id_tagint(11NOT NULL auto_increment,
  `
idint(11NOT NULL default '0',
  `
tagvarchar(100collate utf8_unicode_ci NOT NULL default '',
  `
relevanciaint(11NOT NULL default '0',
  
PRIMARY KEY  (`id_tag`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=57 
la tabla de categorias es "categories"

Código PHP:
CREATE TABLE `categories` (
  `
idint(11NOT NULL auto_increment,
  `
parentint(11) default NULL,
  `
titletext collate utf8_unicode_ci,
  `
pathtext collate utf8_unicode_ci,
  `
descriptiontext collate utf8_unicode_ci,
  `
keywordstext collate utf8_unicode_ci,
  `
datedate NOT NULL default '0000-00-00',
  
PRIMARY KEY  (`id`)
ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=238 
,... por favor a ver si se implica alguien mas,.. creo que es interesante para mas usuarios,... si alguien lo quiere le puedo pasar un sencillo admin formulario que tengo hecho para añadir cada tag en la db "Añadir" "Editar" "Borrar" con los 4 campos de cada tag "id_tag" ("id" , con este campo quiero hacer la relacion con las categorias, osea que de momento es inutil) "tag" y "relevancia"

enga a ver si alguien me da un empujonnnnn

Saludos
  #6 (permalink)  
Antiguo 29/11/2007, 08:26
 
Fecha de Ingreso: mayo-2003
Mensajes: 92
Antigüedad: 20 años, 11 meses
Puntos: 0
Re: Sistema tag-cloud

,.. nadie me hecha una mano ???
  #7 (permalink)  
Antiguo 29/11/2007, 09:10
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: Sistema tag-cloud

hola, no me lei todo tu post porque esta larguito , pero aqui te dejo un link con un ejemplo que a mi me funciono:
http://www.webtutoriales.com/tutoria...-cloud.16.html

en mi caso, tengo una tabla de noticias y otra de categorias relacionadas y demas, y el codigo del ejemplo que te pongo lo modifique y me quedo asi:
Código PHP:
<?php
include("conexion.php");
mysql_select_db($database$db_link);

$result mysql_query ("SELECT noticias.categoriaID, noticias.noticia_ID, categorias.categoria_ID, categorias.categoria FROM categorias, noticias WHERE noticias.categoriaID = categorias.categoria_ID ORDER BY categoria ASC"$db_link) or die (mysql_error());

$grande 10;
$chico 50;

while(
$fila mysql_fetch_array($result)){
    
$etiquetas[$fila['categoria']] = $fila['categoriaID'];
}

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

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

$incremento = ($grande $chico)/($rango);

foreach(
$etiquetas as $claves => $valor){
    
$tamanio $chico + (($valor $menor_cantidad) * $incremento);
    echo 
" <a href='#' style='font-size:".$tamanio."'>".$claves."</a> ";  
}
?>
aqui, le relevancia esta dada por la cantidad de noticias que tenga cada categoria, lo curioso que me paso fue, que el script solo funciona muy bien, pero al meterlo en un modulo no, pienso que es un problema de CSS, pero como despues me enrede en otras cosas lo deje para mas adelante, de todos modos aqui te dejo tambien para que veas mi script como funciona:
http://tuwebmaster.alojalo.info/tagcloud.php

saludos y suerte, espero te sirva lo que te doy de ejemplo, una cosa y repito que no me lei todo el post (perdon por eso), pero, para que necesitas una tabla "relevancia"???
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #8 (permalink)  
Antiguo 29/11/2007, 09:31
 
Fecha de Ingreso: mayo-2003
Mensajes: 92
Antigüedad: 20 años, 11 meses
Puntos: 0
Re: Sistema tag-cloud

Hola y gracias por tu respuesta,... la tabla relevancia es para asignar a cada tag en el estilo un <h1>, <h2> , etc

esto segun se mire s valido por estetica,.. posicionamiento de la tag (ultimamente dicen que no) , etc

Te agradezco mucho tu ejemplo pero estoy empecinado en sacar lo que pregunto, te aseguro que aunque parece que no interesa a nadie es realmente interesante el script y con muchisimas aplicaciones

en fin,.. seguire indagando la jodia consulta,.. la he probado de mil formas y no hay manera de que me funcione

Saludos

puedes ver el sistema funcionando con todas tags fijas (sin filtrar por la categoria) aqui:

h t t p : / / w w w . c h e m u s k a . c o m

Última edición por Chemix; 29/11/2007 a las 09:41
  #9 (permalink)  
Antiguo 29/11/2007, 09:40
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 18 años, 8 meses
Puntos: 638
Re: Sistema tag-cloud

bueno:
Cita:
cada loco con su tema
Cita:
a cada aguacate le llega su ventolera
te pregunte, porque por arribita vi, y como que le quieres dar la relevancia manualamente, mediante la tabla tag, pero lo mejor es que la relevancia la obtenga cada categoria sola por ella misma, en el caso que te di, es por la cantidad de noticias que tenga cada categoria, pero puede ser por la cantidad de lecturas, de descargas, de lo que se te antoje, creo que estas empecinado en algo que al final te dara mas trabajo,

a mi entender, si te quitas de arriba la tal tabla tag y dejas el nivel de relevancia que dependa de otra cosa seria mejor, cosa que programes algo y despues funcione solo, no crees?

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #10 (permalink)  
Antiguo 29/11/2007, 09:46
 
Fecha de Ingreso: mayo-2003
Mensajes: 92
Antigüedad: 20 años, 11 meses
Puntos: 0
Re: Sistema tag-cloud

no,.. de cara al posicionamiento del sitio me interesa darle la relevancia,.. osea un <h1> o >h2> ,... etc a cada tag manualmente

saludos de nuevo
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:27.