Vous avez surment remarqué, avec l'arrivé du Web 2.0, la venu des "Tag Clouds"! Oui Oui, vous avez surment remarquez une liste de mots différenciés par leur taille de police sur plusieurs blogs. En effet, les "Tag Clouds" est une liste de mot qui représente les sujets/catégories qui sont rataché aux pages du site. Mais pourquoi la différence de taille entre chacune d'elle ? Et bien c'est tout simplement leur niveau de popularité. Plus le mot clé est populaire, plus sa taille sera grande comparé au autres mots clés. Nous allons donc vous montrez comment en faire un par vous même sous PHP.
CODE :
<?php
// N'oubliez pas de vous connectez à votre base de données
// Afin d'adapter le code à votre site internet, il vous suffit de modifier 3 choses :
// col est le nom du champs représentant le Tag Cloud
// ID est la clé primaire
// MA_TABLE est le nom de ma base de données
$query = "SELECT col AS tag, COUNT(id) AS quantity FROM MA_TABLE GROUP BY col ORDER BY col ASC";
$result = mysql_query($query);
// Boucle à travers les résultats afin de les mettres dans un simple tableau:
// $tag['col1'] = 12;
// $tag['col2'] = 25;
// etc. Ceci nous permetteras de calculer la taille de chacun d'entre eux.
while ($row = mysql_fetch_array($result)) {
$tags[$row['tag']] = $row['quantity'];
}
// Taille maximal - Taille minimal
$max_size = 250; // max font size en %
$min_size = 100; // min font size en %
// Obtenir la plus petit valeur et la plus grande du tableau
$max_qty = max(array_values($tags));
$min_qty = min(array_values($tags));
// Déterminer l'étendu des valeurs
$spread = $max_qty - $min_qty;
if (0 == $spread) { // we don't want to divide by zero
$spread = 1;
}
// Détermine l'incrémentation du font-size
$step = ($max_size - $min_size)/($spread);
// Boucle à travers le tableau
foreach ($tags as $key => $value) {
// Calcul du font-size CSS
// trouvez les valeur supérieurs au $min_qty
// multiplier par la valeur de l'incrémentatiion ($size)
// et ajouter la valeur du minimum ($min_size)
$size = $min_size + (($value - $min_qty) * $step);
// Afin de terminer le script, il vous suffit de modifier les caractères
// '####' par le lien de destination voulu.
echo '<a xhref="http://www.pckult.net/####" style="font-size: '.$size.'%"';
echo ' title="'.$value.' cols tagged with '.$key.'"';
echo '>'.$key.'</a> ';
}
?>
Afficher les 50 Tags les plus populaires :
SQL :SELECT thing AS tag, COUNT(id) AS quantity FROM my_table GROUP BY thing ORDER BY thing ASC LIMIT 50
Afficher les Tags les plus populaires du dernier mois :
SQL :SELECT thing AS tag, COUNT(id) AS quantity FROM my_table WHERE added > DATE_SUB(NOW(), INTERVAL 1 MONTH) GROUP BY thing ORDER BY thing ASC
Voici donc le résultat sans les liens bien sur :
Thing 1 Thing 2 Thing 3 Thing 4 Thing 5 Thing 6 Thing 7 Thing 8
J'espère que vous trouverez cela utile! Dans mon cas, je trouve utile afin de voir la popularité de certains mots clés. blog post tags, membership per country, songs per artist in your favorite playlist, etc.
Commentaires (13)

Ecrit par Mr Blouh, octobre 06, 2007
Salut ! J'essaie désespérément de créer moi aussi un nuage de mots clés comme celui là , qui fonctionne bien. J'ai cependant une petite question. Ou en tous cas une demande d'aide…
J'ai une table "articles" dans ma base MySQL dans laquelle, outre le titre, la date et d'autres infos dont on se tamponne ici, il y a un champ "tags" où l'utilisateur saisira autant de mots clés qu'il le désire, séparés par une virgule.
Je dois donc récupérer chaque mot séparément en utilisant un truc du genre :
Mais comme je suis une bille, je n'y arrive pas… Je ne sais pas où je doit insérer cette fonction… Sans doute quelque part par ici
Mais ça ne marche pas…
Si je pouvais avoir un petit coup de pouce là dessus, je vous en serait bien reconnaissant !
J'ai une table "articles" dans ma base MySQL dans laquelle, outre le titre, la date et d'autres infos dont on se tamponne ici, il y a un champ "tags" où l'utilisateur saisira autant de mots clés qu'il le désire, séparés par une virgule.
Je dois donc récupérer chaque mot séparément en utilisant un truc du genre :
$taglist = split(",", $tags);
Mais comme je suis une bille, je n'y arrive pas… Je ne sais pas où je doit insérer cette fonction… Sans doute quelque part par ici
while ($row = mysql_fetch_array($result)) {
$tags[$row['tag']] = $row['quantity'];
}
Mais ça ne marche pas…
Si je pouvais avoir un petit coup de pouce là dessus, je vous en serait bien reconnaissant !
Ecrit par Grayzor, août 13, 2007
Trés bien mais "l'incrémentatiion" avec un "i" c'est mieux !
Ecrit par modulo, juin 26, 2007
Salut
pas mal ce script mais pk ne pas mettre des couleurs differentes pour le texte comme l'exemple en haut du site ?
du genre
pas mal ce script mais pk ne pas mettre des couleurs differentes pour le texte comme l'exemple en haut du site ?
du genre
if( $size >= 120 )
{
echo ' echo ' title="'.$key.' visité '.$value.' fois"';
echo '>'.$key.' ';
}
else if ( $size >= 90 )
{
echo ' echo ' title="'.$key.' visité '.$value.' fois"';
echo '>'.$key.' ';
}
else
{
echo ';"';
echo ' title="'.$key.' visité '.$value.' fois"';
echo '>'.$key.' ';
}
Ecrit par Maliss, juin 05, 2007
Merci bcp pour ce code clair et simple d'utilisation ^^
A moi les tagssssssss !
A moi les tagssssssss !
Ecrit par eMeRiKa, novembre 21, 2006
merci j'avais pas fait attention à la présence d'un forum!!
Ecrit par eMeRiKa, novembre 19, 2006
Bonjour, tout d'abord merci pour ce précieux tuto, mais j'ai besoin de précision :
// Afin d'adapter le code à votre site internet, il vous suffit de modifier 3 choses :
// col est le nom du champs représentant le Tag Cloud
// ID est la clé primaire
// MA_TABLE est le nom de ma base de données
Prenons l'exemple d'un site de recette de cuisine, il faut que je crée une table recette avec un champ "tag Cloud" et donc j'associre l'id de chaque recette?
Je suis un peu perdu sur cette question de tags. Merci des précisions.
// Afin d'adapter le code à votre site internet, il vous suffit de modifier 3 choses :
// col est le nom du champs représentant le Tag Cloud
// ID est la clé primaire
// MA_TABLE est le nom de ma base de données
Prenons l'exemple d'un site de recette de cuisine, il faut que je crée une table recette avec un champ "tag Cloud" et donc j'associre l'id de chaque recette?
Je suis un peu perdu sur cette question de tags. Merci des précisions.
Ecrivez un commentaire





















merci
Enjoy 
SELECT thing AS tag, counter
FROM my_table
WHERE tag_id IN (SELECT tag_id FROM my_table ORDER BY counter DESC LIMIT 50)
ORDER BY thing ASC
Pour info, j'ai quelque peu modifié la structure de la table afin d'avoir un champs "counter" qui évite l'utilisation de la fonction COUNT().