आकार बदलने के लिए h1 से h6 का उपयोग कर सरणी से टैग क्लाउड उत्पन्न करने का सबसे अच्छा तरीका क्या है?

मेरे पास निम्नलिखित सरणी हैं:

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

मैं एक टैग क्लाउड उत्पन्न करना चाहता हूं जिसमें $ count में h6 टैग और निम्नतम संलग्न h1 टैग में संलग्न उच्च संख्या वाले कलाकार होंगे।

0
जोड़ा संपादित
विचारों: 2

6 उत्तर

@Ryan

यह सही है लेकिन यह वास्तव में टैग को कम से कम संख्या के साथ बनाता है, बड़ा। इस कोड का परीक्षण किया गया है:

$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
जोड़ा

शायद यह एक छोटा अकादमिक और विषय है लेकिन hX टैग शायद दस्तावेज़ संरचना के कारणों और टैग की वजह से टैग क्लाउड के लिए सबसे अच्छा विकल्प नहीं है।

शायद उचित वर्ग विशेषताओं (साथ ही कुछ सीएसएस) के साथ span s या ol ?

0
जोड़ा

मेरे सर के ऊपर से चला गया...

$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
जोड़ा

आप इसे एक लॉगरिदमिक फ़ंक्शन भी जोड़ना चाहेंगे। (टैगडेलिक से लिया गया, मेरे ड्रूपल मॉड्यूल टैग क्लाउड बनाने के लिए 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);
}

फिर आपके विचार या टेम्पलेट में:

foreach ($tags as $tag) {
    $output .= "weight>$tag->nameweight>"
}
0
जोड़ा

यह विधि SQL / PostgreSQL fanatics के लिए है। यह डेटाबेस में पूरी नौकरी करता है, और यह "slugified" लिंक के साथ पाठ मुद्रित करता है। यह सिर्फ एसक्यूएल कॉल के लिए सिद्धांत <�कोड> ओआरएम </कोड> का उपयोग करता है, मैं वस्तुओं का उपयोग नहीं कर रहा हूं। मान लें कि हमारे पास 10 आकार हैं:

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

तो आप उन्हें .tagranking10 (सर्वोत्तम) से .tagranking1 (सबसे खराब) से कुछ सीएसएस वर्ग के साथ प्रिंट करते हैं:

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

और यह सीएसएस है:

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

यह विधि सभी टैग प्रदर्शित करती है। यदि आपके पास उनमें से बहुत सारे हैं, तो शायद आप नहीं चाहते कि आपका टैग क्लाउड टैग तूफान बन जाए। उस स्थिति में आप अपनी SQL क्वेरी में हैविंग क्लॉज जोड़ देंगे:

-- minimum tag count is 8 --

HAVING count(tag) > 7

बस इतना ही

0
जोड़ा

मुझे इसकी पुरानी पोस्ट पता है। मेरे विचार को पोस्ट करना क्योंकि यह भविष्य में किसी की मदद कर सकता है।

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
जोड़ा