Vă mulțumim pentru susținere

Care este cel mai bun mod de a genera un nor de tag dintr-un matrice folosind h1 până la h6 pentru dimensionare?

Am urmatoarele tablouri:

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

Vreau să generez un cloud tag care va conține artiști cu un număr mai mare în $ count inclus în etichetele h6 și cele mai mici etichete h1 închise.

0
adăugat editat

6 răspunsuri

@Ryan

Este corect, dar de fapt face etichetele cu cel mai mic număr, mai mare. Acest cod a fost testat:

$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
adăugat

Poate că acesta este un subiect puțin academic și în afara subiectului, dar etichetele hX probabil nu sunt cea mai bună alegere pentru un cloud tag din motive de structură a documentelor și toate aceste lucruri.

Poate că span s sau un ol cu atribute de clasă corespunzătoare (plus unele CSS)?

0
adăugat

În partea de sus a capului meu ...

$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
adăugat

Veți dori să adăugați și o funcție logaritmică. (luată de la tagadelic, modulul meu Drupal pentru a crea nori de etichete 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);
}

Apoi, în vizualizarea sau șablonul dvs.:

foreach ($tags as $tag) {
    $output .= "weight>$tag->nameweight>"
}
0
adăugat

Această metodă este pentru fantele SQL / PostgreSQL . Face întreaga activitate în baza de date și imprimă text cu link-ul "slugified". Utilizează Doctrină ORM doar pentru apelul sql, nu folosesc obiecte. Să presupunem că avem 10 dimensiuni:

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

apoi le imprimați cu unele clase CSS, de la .tagranking10 (cel mai bun) la .tagranking1 (cel mai rău):


    
        %s', 
            $tag['slug'], $tag['tag']
        ); ?>
    

și acesta este 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 */

Această metodă afișează toate etichetele. Dacă aveți multe dintre ele, probabil că nu doriți ca norul dvs. de etichete să devină o furtună de etichete . În acest caz, ați adăuga o clauză HAVING TO la interogarea SQL:

-- minimum tag count is 8 --

HAVING count(tag) > 7

Asta e tot

0
adăugat

Știu postul foarte vechi. postând punctul meu de vedere, deoarece ar putea ajuta pe cineva în viitor.

Here is the tagcloud I used in my website http://www.vbausefulcodes.in/

" . $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
adăugat