son qué que poner etiquetas ejemplos cursiva como php arrays cloud tag-cloud

php - qué - ¿Cuál es la mejor manera de generar una nube de etiquetas desde una matriz usando h1 a h6 para dimensionar?



qué son etiquetas h1 h2 h3 (8)

Tengo las siguientes matrices:

$artist = array("the roots", "michael jackson", "billy idol", "more", "and more", "and_YET_MORE"); $count = array(5, 3, 9, 1, 1, 3);

Quiero generar una nube de etiquetas que tendrá artistas con un número más alto en $count encerrado en etiquetas h6 y las etiquetas h1 encerradas más bajas.


@Ryan

Eso es correcto, pero en realidad hace que las etiquetas con el menor número, más grandes. Este código ha sido probado:

$artist = array("the roots","michael jackson","billy idol","more","and more","and_YET_MORE"); $count = array(5,3,9,1,1,3); $highest = max($count); for ($x = 0; $x < count($artist); $x++) { $normalized = ($highest - $count[$x]+1) / $highest; $heading = ceil($normalized * 6); // 6 heading types echo "<h$heading>{$artist[$x]}</h$heading>"; }


Como ayudante en Rails:

def tag_cloud (strings, counts) max = counts.max strings.map { |a| "<span style=''font-size:#{((counts[strings.index(a)] * 4.0)/max).ceil}em''>#{a}</span> " } end

Llame esto desde la vista:

<%= tag_cloud($artists, $counts) %>

Esto genera elementos de <span style=''font-size:_em''> en una matriz que se convertirá en una cadena en la vista para finalmente renderizar así:

<span style=''font-size:3em''>the roots</span> <span style=''font-size:2em''>michael jackson</span> <span style=''font-size:4em''>billy idol</span> <span style=''font-size:1em''>more</span> <span style=''font-size:1em''>and more</span> <span style=''font-size:2em''>and_YET_MORE</span>

Sería mejor tener un atributo de class y hacer referencia a las clases en una hoja de estilo como mencionó Brendan anteriormente. Mucho mejor que usar semánticamente h1-h6 y hay menos equipaje de estilo con un <span> .


Este método es para fanáticos de SQL/PostgreSQL . Realiza todo el trabajo en la base de datos e imprime el texto con el enlace "slugified". Utiliza Doctrine ORM solo para la llamada sql, no estoy usando objetos. Supongamos que tenemos 10 tamaños:

public function getAllForTagCloud($fontSizes = 10) { $sql = sprintf("SELECT count(tag) as tagcount,tag,slug, floor((count(*) * %d )/(select max(t) from (select count(tag) as t from magazine_tag group by tag) t)::numeric(6,2)) as ranking from magazine_tag mt group by tag,slug", $fontSizes); $q = Doctrine_Manager::getInstance()->getCurrentConnection(); return $q->execute($sql); }

luego los imprime con alguna clase de CSS, desde .tagranking10 (el mejor) hasta .tagranking1 (el peor):

<?php foreach ($allTags as $tag): ?> <span class="<?php echo ''tagrank''.$tag[''ranking''] ?>"> <?php echo sprintf(''<a rel="tag" href="/search/by/tag/%s">%s</a>'', $tag[''slug''], $tag[''tag''] ); ?> </span> <?php endforeach; ?>

y este es el CSS :

/* put your size of choice */ .tagrank1{font-size: 0.3em;} .tagrank2{font-size: 0.4em;} .tagrank3{font-size: 0.5em;} /* go on till tagrank10 */

Este método muestra todas las etiquetas. Si tiene muchos de ellos, probablemente no quiera que su nube de etiquetas se convierta en una tormenta de etiquetas . En ese caso, agregaría una cláusula HAVING TO a su consulta SQL:

-- minimum tag count is 8 -- HAVING count(tag) > 7

Eso es todo


He usado este fragmento por un tiempo, el crédito es prism-perfect.net. Sin embargo, no usa etiquetas H

<div id="tags"> <div class="title">Popular Searches</div> <?php // Snippet taken from [prism-perfect.net] include "/path/to/public_html/search/settings/database.php"; include "/path/to/public_html/search/settings/conf.php"; $query = "SELECT query AS tag, COUNT(*) AS quantity FROM sphider_query_log WHERE results > 0 GROUP BY query ORDER BY query ASC LIMIT 10"; $result = mysql_query($query) or die(mysql_error()); while ($row = mysql_fetch_array($result)) { $tags[$row[''tag'']] = $row[''quantity'']; } // change these font sizes if you will $max_size = 30; // max font size in % $min_size = 11; // min font size in % // get the largest and smallest array values $max_qty = max(array_values($tags)); $min_qty = min(array_values($tags)); // find the range of values $spread = $max_qty - $min_qty; if (0 == $spread) { // we don''t want to divide by zero $spread = 1; } // determine the font-size increment // this is the increase per tag quantity (times used) $step = ($max_size - $min_size)/($spread); // loop through our tag array foreach ($tags as $key => $value) { // calculate CSS font-size // find the $value in excess of $min_qty // multiply by the font-size increment ($size) // and add the $min_size set above $size = $min_size + (($value - $min_qty) * $step); // uncomment if you want sizes in whole %: // $size = ceil($size); // you''ll need to put the link destination in place of the /search/search.php... // (assuming your tag links to some sort of details page) echo ''<a href="/search/search.php?query=''.$key.''&search=1" style="font-size: ''.$size.''px"''; // perhaps adjust this title attribute for the things that are tagged echo '' title="''.$value.'' things tagged with ''.$key.''"''; echo ''>''.$key.''</a> ''; // notice the space at the end of the link } ?> </div>


La parte superior de mi cabeza...

$artist = array("the roots","michael jackson","billy idol","more","and more","and_YET_MORE"); $count = array(5,3,9,1,1,3); $highest = max($count); for (int $x = 0; $x < count($artist); $x++) { $normalized = $count[$x] / $highest; $heading = ceil($normalized * 6); // 6 heading types echo "<h".$heading.">".$artist[$x]."</h".$heading.">"; }


Quizás esto sea un poco académico y fuera de tema, pero hX etiquetas hX probablemente no sean la mejor opción para una nube de etiquetas por razones de estructura de documentos y todo ese tipo de cosas.

¿Quizás span so un ol con atributos de clase apropiados (más algunos CSS)?


Sé que es una publicación muy antigua. publicar mi punto de vista ya que puede ayudar a alguien en el futuro.

Aquí está el tagcloud que utilicé en mi sitio web http://www.vbausefulcodes.in/

<?php $input= array("vba","macros","excel","outlook","powerpoint","access","database","interview questions","sendkeys","word","excel projects","visual basic projects","excel vba","macro","excel visual basic","tutorial","programming","learn macros","vba examples"); $rand_tags = array_rand($input, 5); for ($x = 0; $x <= 4; $x++) { $size = rand ( 1 , 4 ); echo "<font size=''$size''>" . $input[$rand_tags[$x]] . " " . "</font>"; } echo "<br>"; $rand_tags = array_rand($input, 7); for ($x = 0; $x <= 6; $x++) { $size = rand ( 1 , 4 ); echo "<font size=''$size''>" . $input[$rand_tags[$x]] . " " . "</font>"; } echo "<br>"; $rand_tags = array_rand($input, 5); for ($x = 0; $x <= 4; $x++) { $size = rand ( 1 , 4 ); echo "<font size=''$size''>" . $input[$rand_tags[$x]] . " " . "</font>"; } ?>


También querrás agregarle una función logarítmica. (tomado de tagadelic, mi módulo Drupal para crear nubes de etiquetas http://drupal.org/project/tagadelic ):

db_query(''SELECT COUNT(*) AS count, id, name FROM ... ORDER BY count DESC''); $steps = 6; $tags = array(); $min = 1e9; $max = -1e9; while ($tag = db_fetch_object($result)) { $tag->number_of_posts = $tag->count; #sets the amount of items a certain tag has attached to it $tag->count = log($tag->count); $min = min($min, $tag->count); $max = max($max, $tag->count); $tags[$tag->tid] = $tag; } // Note: we need to ensure the range is slightly too large to make sure even // the largest element is rounded down. $range = max(.01, $max - $min) * 1.0001; foreach ($tags as $key => $value) { $tags[$key]->weight = 1 + floor($steps * ($value->count - $min) / $range); }

Luego, en su vista o plantilla:

foreach ($tags as $tag) { $output .= "<h$tag->weight>$tag->name</h$tag->weight>" }