Foros del Web » Programando para Internet » PHP »

Nube de etiquetas no funciona correctamente

Estas en el tema de Nube de etiquetas no funciona correctamente en el foro de PHP en Foros del Web. Buenas, desde que cambié las medidas del texto a relativas "em", la nube de etiquetas se muestra pero solo refleja grande un termino y todos ...
  #1 (permalink)  
Antiguo 14/03/2009, 04:31
 
Fecha de Ingreso: marzo-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 0
Nube de etiquetas no funciona correctamente

Buenas, desde que cambié las medidas del texto a relativas "em", la nube de etiquetas se muestra pero solo refleja grande un termino y todos los demás pequeños.

El código de la nube es este:
Código PHP:
<?php     flush();
            
wp_tag_cloud('smallest=8&largest=22&unit=pt&number=50&'); 
     
?>
Es posible que sea porque el 8 y el 22 se refiere a pt?, como debería hacerlo para que funcione. Gracias.
Saludos.

Última edición por naked; 16/03/2009 a las 11:49
  #2 (permalink)  
Antiguo 14/03/2009, 09:33
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Nube de etiquetas no funciona correctamente

si sabes las diferencias entre ... em, px, pt ¿???

digo, si no lo sabes, ¿porque lo hiciste así???

me imagino que la unidad debe ser pt o px ... pero, bueno... solo tu sabes, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #3 (permalink)  
Antiguo 14/03/2009, 10:44
 
Fecha de Ingreso: marzo-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Nube de etiquetas no funciona correctamente

Hombre la diferencia la se, o eso creo vamos al menos por lo que leo. No soy ningún experto trato de hacer las cosas como puedo y por mi mismo antes de lanzar una pregunta, pero si posteo esto es porque he llegado a un punto en el que ando perdido.

Quizás es una tontería lo que necesito hacer, pero no se.

El caso es que cambié a "em" para mejorar la accesibilidad y hacer la página más flexible, pero me surgió este problema.

El código php de la nube no lo he hecho yo es de un wordpress.

Saludos.
  #4 (permalink)  
Antiguo 16/03/2009, 11:45
 
Fecha de Ingreso: marzo-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Nube de etiquetas no funciona correctamente

Buscando he encontrado que la función wp_tag_cloud() está en wp-includes/category-template.php

El código que hay es:

Código PHP:
function wp_tag_cloud$args '' ) {
    
$defaults = array(
        
'smallest' => 8'largest' => 22'unit' => 'pt''number' => 45,
        
'format' => 'flat''orderby' => 'name''order' => 'ASC',
        
'exclude' => '''include' => '''link' => 'view'
    
);
    
$args wp_parse_args$args$defaults );

    
$tags get_tagsarray_merge$args, array( 'orderby' => 'count''order' => 'DESC' ) ) ); // Always query top tags

    
if ( empty( $tags ) )
        return;

    foreach ( 
$tags as $key => $tag ) {
        if ( 
'edit' == $args['link'] )
            
$link get_edit_tag_link$tag->term_id );
        else
            
$link get_tag_link$tag->term_id );
        if ( 
is_wp_error$link ) )
            return 
false;

        
$tags$key ]->link $link;
        
$tags$key ]->id $tag->term_id;
    }

    
$return wp_generate_tag_cloud$tags$args ); // Here's where those top tags get sorted according to $args

    
$return apply_filters'wp_tag_cloud'$return$args );

    if ( 
'array' == $args['format'] )
        return 
$return;

    echo 
$return;
}

/**
 * Default text for tooltip for tag links
 *
 * @param integer $count number of posts with that tag
 * @return string text for the tooltip of a tag link.
 */
function default_topic_count_text$count ) {
    return 
sprintf__ngettext('%s topic''%s topics'$count), number_format_i18n$count ) );
}

/**
 * Generates a tag cloud (heatmap) from provided data.
 *
 * The text size is set by the 'smallest' and 'largest' arguments, which will
 * use the 'unit' argument value for the CSS text size unit. The 'format'
 * argument can be 'flat' (default), 'list', or 'array'. The flat value for the
 * 'format' argument will separate tags with spaces. The list value for the
 * 'format' argument will format the tags in a UL HTML list. The array value for
 * the 'format' argument will return in PHP array type format.
 *
 * The 'orderby' argument will accept 'name' or 'count' and defaults to 'name'.
 * The 'order' is the direction to sort, defaults to 'ASC' and can be 'DESC' or
 * 'RAND'.
 *
 * The 'number' argument is how many tags to return. By default, the limit will
 * be to return the entire tag cloud list.
 *
 * The 'topic_count_text_callback' argument is a function, which given the count
 * of the posts  with that tag returns a text for the tooltip of the tag link.
 *
 * @todo Complete functionality.
 * @since 2.3.0
 *
 * @param array $tags List of tags.
 * @param string|array $args Optional, override default arguments.
 * @return string
 */
function wp_generate_tag_cloud$tags$args '' ) {
    global 
$wp_rewrite;
    
$defaults = array(
        
'smallest' => 8'largest' => 22'unit' => 'pt''number' => 0,
        
'format' => 'flat''orderby' => 'name''order' => 'ASC',
        
'topic_count_text_callback' => 'default_topic_count_text',
    );

    if ( !isset( 
$args['topic_count_text_callback'] ) && isset( $args['single_text'] ) && isset( $args['multiple_text'] ) ) {
        
$body 'return sprintf (
            __ngettext('
.var_export($args['single_text'], true).', '.var_export($args['multiple_text'], true).', $count),
            number_format_i18n( $count ));'
;
        
$args['topic_count_text_callback'] = create_function('$count'$body);
    }

    
$args wp_parse_args$args$defaults );

    
extract$args );

    if ( empty( 
$tags ) )
        return;

    
// SQL cannot save you; this is a second (potentially different) sort on a subset of data.
    
if ( 'name' == $orderby )
        
uasort$tagscreate_function('$a, $b''return strnatcasecmp($a->name, $b->name);') );
    else
        
uasort$tagscreate_function('$a, $b''return ($a->count > $b->count);') );

    if ( 
'DESC' == $order )
        
$tags array_reverse$tagstrue );
    elseif ( 
'RAND' == $order ) {
        
$keys array_rand$tagscount$tags ) );
        foreach ( 
$keys as $key )
            
$temp[$key] = $tags[$key];
        
$tags $temp;
        unset( 
$temp );
    }

    if ( 
$number )
        
$tags array_slice($tags0$number);

    
$counts = array();
    foreach ( (array) 
$tags as $key => $tag )
        
$counts$key ] = $tag->count;

    
$min_count min$counts );
    
$spread max$counts ) - $min_count;
    if ( 
$spread <= )
        
$spread 1;
    
$font_spread $largest $smallest;
    if ( 
$font_spread )
        
$font_spread 1;
    
$font_step $font_spread $spread;

    
$a = array();

    
$rel = ( is_object$wp_rewrite ) && $wp_rewrite->using_permalinks() ) ? ' rel="tag"' '';

    foreach ( 
$tags as $key => $tag ) {
        
$count $counts$key ];
        
$tag_link '#' != $tag->link clean_url$tag->link ) : '#';
        
$tag_id = isset($tags$key ]->id) ? $tags$key ]->id $key;
        
$tag_name $tags$key ]->name;
        
$a[] = "<a href='$tag_link' class='tag-link-$tag_id' title='" attribute_escape$topic_count_text_callback$count ) ) . "'$rel style='font-size: " .
            ( 
$smallest + ( ( $count $min_count ) * $font_step ) )
            . 
"$unit;'>$tag_name</a>";
    }

    switch ( 
$format ) :
    case 
'array' :
        
$return =& $a;
        break;
    case 
'list' :
        
$return "<ul class='wp-tag-cloud'>\n\t<li>";
        
$return .= join"</li>\n\t<li>"$a );
        
$return .= "</li>\n</ul>\n";
        break;
    default :
        
$return join"\n"$a );
        break;
    endswitch;

    return 
apply_filters'wp_generate_tag_cloud'$return$tags$args );

He probado a cambiar en "unit=" a "em" pero sigue sucediendo lo mismo. Sigo igual o mas perdido que antes.
Un saludo.
  #5 (permalink)  
Antiguo 16/03/2009, 12:44
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
Respuesta: Nube de etiquetas no funciona correctamente

Hola, échale una ojeada a este link:
http://codex.wordpress.org/Template_Tags/wp_tag_cloud

En tu archivo wp-includes/category-template.php te esta diciendo que el valor por default de la variable unit es pt, debes cambiarlo ahi (creo) y luego cambiarlo en el codigo que usas para hacer la nube:
Código php:
Ver original
  1. wp_tag_cloud('smallest=8&largest=22&unit=em&number=50&');

saludos y suerte
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #6 (permalink)  
Antiguo 16/03/2009, 16:10
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años
Puntos: 2534
Respuesta: Nube de etiquetas no funciona correctamente

NO entiendo la razón de usar em, como tu debes saber... esta unidad representa la altura del carácter en cuestión osea...

que 12px no es igual que 12pt ya que depende mucho de los monitores... y sus resoluciones, pues...

por cada em se escala al 100% el tamaño del carácter osea...

que 2em es igual (supongo) que 200% en el tamaño de la letra....

osea, ¿por que usar em??? ¿sabes lo que resultara???

por eso, yo te recomiendo pienses un poco mas en serio lo que te digo....

y si, yo he trabajado con nubes de tags, y obvio, la unidad por excelencia es em, pero bien empleado.... digamos, usando fracciones y no enteros...

por lo cual, 0.3em es mejor que 7pt y ya sabrás por que....

tal ves, si modificas el comportamiento de la funcion de WP ya veo que lo lograrás con seguridad, suerte!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.

Última edición por pateketrueke; 18/03/2009 a las 20:21
  #7 (permalink)  
Antiguo 18/03/2009, 19:28
 
Fecha de Ingreso: marzo-2009
Mensajes: 71
Antigüedad: 15 años, 1 mes
Puntos: 0
Respuesta: Nube de etiquetas no funciona correctamente

Gracias, a todos por la ayuda.

Bueno por partes. Cambiando en el archivo donde está la función a fracciones y a la unidad a "em", la nube funciona.
Pero lo que ocurre es que no funciona en cualquier parte del código, sino según donde la ponga.

En el side bar seguía sin funcionar, pero me dio por probarla en la cabecera y funciona. Fui bajando el código de la nube entre caja y caja hasta que me dí cuenta de que a partir de una de las cajas de la cabecera deja de funcionar.

Debe ser un tema de CSS entonces?.

Un saludo.

PD. Lo curioso es que comento todo el css de las cajas de la cabecera y sucede lo mismo, hay un punto en el código en el que de ahí para abajo deja de funcionar.
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 00:34.