Ποιος είναι ο καλύτερος τρόπος για να δημιουργήσετε ένα σύννεφο tag από μια σειρά χρησιμοποιώντας h1 μέσω h6 για την ταξινόμηση κατά μέγεθος;

ψήφοι
67

Έχω τις ακόλουθες διατάξεις:

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

Θέλω να δημιουργήσει ένα σύννεφο tag που θα έχουν οι καλλιτέχνες με υψηλότερο αριθμό σε $countπερικλείονται σε h6ετικέτες και τις χαμηλότερες κλειστό h1ετικέτες.

Δημοσιεύθηκε 01/08/2008 στις 22:40
πηγή χρήστη
Σε άλλες γλώσσες...                            


8 απαντήσεις

ψήφοι
38

Θα ήθελα να προσθέσω μια λογαριθμική συνάρτηση για αυτό πάρα πολύ. (που λαμβάνονται από tagadelic, μονάδα μου Drupal για να δημιουργήσει σύννεφα ετικέτα 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 .= "<h$tag->weight>$tag->name</h$tag->weight>"
}
Απαντήθηκε 31/05/2010 στις 12:53
πηγή χρήστη

ψήφοι
30

Από την κορυφή του κεφαλιού μου ...

$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.">";
}
Απαντήθηκε 02/08/2008 στις 00:10
πηγή χρήστη

ψήφοι
22

Ίσως αυτό είναι λίγο ακαδημαϊκή και εκτός θέματος, αλλά hXοι ετικέτες δεν είναι ίσως η καλύτερη επιλογή για ένα σύννεφο tag για λόγους δομής του εγγράφου και όλο αυτό το είδος του πράγματος.

Ίσως spans ή olμε κατάλληλα χαρακτηριστικά της κατηγορίας (συν κάποια CSS);

Απαντήθηκε 03/08/2008 στις 14:01
πηγή χρήστη

ψήφοι
8

Έχουν χρησιμοποιήσει αυτό το απόσπασμα για μια στιγμή, πίστωση είναι prism-perfect.net. Δεν χρησιμοποιεί 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>
Απαντήθηκε 17/09/2008 στις 22:29
πηγή χρήστη

ψήφοι
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 "<h$heading>{$artist[$x]}</h$heading>";
}
Απαντήθηκε 02/08/2008 στις 00:58
πηγή χρήστη

ψήφοι
2

Αυτή η μέθοδος είναι για SQL/PostgreSQLφανατικούς. Κάνει όλη τη δουλειά στη βάση δεδομένων, και τυπώνει το κείμενο με «slugified» σύνδεσμο. Χρησιμοποιεί Δόγμα ORMμόνο για την κλήση SQL, δεν είμαι με τη χρήση αντικειμένων. Ας υποθέσουμε ότι έχουμε 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);
}

Στη συνέχεια μπορείτε να εκτυπώσετε με κάποια κατηγορία CSS, από .tagranking10 (το καλύτερο) για να .tagranking1 (το χειρότερο):

<?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; ?>

και αυτό είναι το 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 */

Η μέθοδος αυτή εμφανίζει όλες τις ετικέτες. Αν έχετε πολλά από αυτά, τότε μάλλον δεν θέλουν σύννεφο tag σας να γίνει μια καταιγίδα ετικέτα . Σε αυτή την περίπτωση θα προσθέσετε μια HAVING TOρήτρα στο ερώτημα SQL σας:

-- minimum tag count is 8 --

HAVING count(tag) > 7

Αυτό είναι όλο

Απαντήθηκε 14/07/2010 στις 19:19
πηγή χρήστη

ψήφοι
1

Ως βοηθός στην Ράγες:

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

Καλέστε αυτό από την άποψη:

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

Αυτό εξάγει <span style='font-size:_em'>τα στοιχεία σε έναν πίνακα που θα μετατραπεί σε μια συμβολοσειρά στην προβολή να καταστήσει τελικά όπως έτσι:

<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> 

Θα ήταν καλύτερο να έχουμε ένα classχαρακτηριστικό και αναφορά των κατηγοριών σε ένα φύλλο στυλ, όπως αναφέρει ο Brendan παραπάνω. Πολύ καλύτερα από ό, τι με τη χρήση h1-h6σημασιολογικά και υπάρχει λιγότερη αποσκευές στυλ με ένα <span>.

Απαντήθηκε 02/10/2008 στις 22:47
πηγή χρήστη

ψήφοι
0

Ξέρω πολύ παλιά θέση του. σημειώνοντας την άποψή μου, δεδομένου ότι μπορεί να βοηθήσει κάποιος στο μέλλον.

Εδώ είναι η tagcloud που χρησιμοποιείται στην ιστοσελίδα μου 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>";
}
?>
Απαντήθηκε 28/01/2017 στις 04:39
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more