Quelle est la meilleure façon de générer un nuage de tags à partir d'un tableau en utilisant h1 à h6 pour le dimensionnement?

J'ai les tableaux suivants:

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

Je veux générer un nuage de balises qui inclura des balises $ count dans les balises h6 et les balises h1 les plus basses.

0
ajouté édité
Vues: 3

6 Réponses

@Ryan

C'est correct mais en fait les tags avec le plus petit nombre, plus grand. Ce code a été testé:

$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 "{$artist[$x]}";
}
0
ajouté

C'est peut-être un peu académique et hors sujet, mais les balises hX ne sont probablement pas le meilleur choix pour un nuage de tags pour des raisons de structure de document et tout ce genre de chose.

Peut-être span s ou un ol avec les attributs de classe appropriés (plus certains CSS)?

0
ajouté

Du haut de ma tête...

$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 "".$artist[$x]."";
}
0
ajouté

Vous voudrez également ajouter une fonction logarithmique. (tiré de tagadelic, mon module Drupal pour créer des nuages ​​de tags 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);
}

Ensuite, dans votre vue ou votre modèle:

foreach ($tags as $tag) {
    $output .= "weight>$tag->nameweight>"
}
0
ajouté

Cette méthode est pour les fanatiques SQL / PostgreSQL . Il fait tout le travail dans la base de données, et imprime du texte avec un lien "slugifié". Il utilise Doctrine ORM juste pour l'appel sql, je n'utilise pas d'objets. Supposons que nous avons 10 tailles:

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);
}

puis vous les imprimez avec une classe CSS, de .tagranking10 (le meilleur) à .tagranking1 (le pire):

<?php foreach ($allTags as $tag): ?>
    
        <?php echo sprintf('', 
            $tag['slug'], $tag['tag']
        ); ?>
    
<?php endforeach; ?>

et voici le 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 */

Cette méthode affiche tous les tags. Si vous en avez beaucoup, vous ne voulez probablement pas que votre nuage de tags devienne un tag storm . Dans ce cas, vous devez ajouter une clause HAVING TO à votre requête SQL:

-- minimum tag count is 8 --

HAVING count(tag) > 7

C'est tout

0
ajouté

Je connais son très vieux post. afficher mon point de vue car cela pourrait aider quelqu'un à l'avenir.

Here is the tagcloud I used in my website 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 "" . $input[$rand_tags[$x]] . " " . "";
}

echo "
"; $rand_tags = array_rand($input, 7); for ($x = 0; $x <= 6; $x++) { $size = rand ( 1 , 4 ); echo "" . $input[$rand_tags[$x]] . " " . ""; } echo "
"; $rand_tags = array_rand($input, 5); for ($x = 0; $x <= 4; $x++) { $size = rand ( 1 , 4 ); echo "" . $input[$rand_tags[$x]] . " " . ""; } ?>
0
ajouté