PcKULT.NET - La référence en informatique

  • Increase font size
  • Default font size
  • Decrease font size
  • default color
  • black color

PcKULT.NET - Recrute

PcKULT.NET est présentement à la recherche de passionnés d'informatique qui veulent se greffer à l'équipe de PcKULT.NET. Si l'aventure vous intéresse, veuillez communiquer avec nous.

webmaster@pckult.net


Faire son propre Tag Cloud sous PHP

E-mail Imprimer PDF
tagcloud
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.



tag_cloud


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.


Ajouter cette page à votre Digg-Like préféré
Reddit! Del.icio.us! JoomlaVote! Google! Live! Facebook! Technorati! StumbleUpon! Spurl! Furl! Blogmarks! Yahoo! FeedMeLinks!
Commentaires (13)Add Comment
Les 50 tags les plus populaires
Ecrit par fdarbel, juin 22, 2008
Merci pour l'exemple... Il me semble cependant que pour obtenir les 50 tags les plus populaires, la requête serait plutôt la suivante:
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().
pas mal
Ecrit par strex, mai 29, 2008
smilies/grin.gif merci
Petite question
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 :
$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 !
Bien
Ecrit par Grayzor, août 13, 2007
Trés bien mais "l'incrémentatiion" avec un "i" c'est mieux !
...
Ecrit par flo, juillet 03, 2007
salut
Une idée
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
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 !
,?
Ecrit par ta maman, février 28, 2007
SALUT
goldy
Ecrit par singh is king, février 03, 2007
rien
...
Ecrit par Dave Lizotte, décembre 05, 2006
Tout d'abord si tu veux faire celà , il va te falloir une table comprenant exemple :

TABLE TAG_RECETTE
-------------
ID
ID_RECETTE
TAG
COMPTEUR

TABLE TAG_RECETTE
-------------
1 1 patate 0
2 1 carotte 0
3 1 navet 0
4 2 pomme 10
5 3 farine 3
6 3 sucre 3
...

Donc si on reprend le principe, lorsque tu ajoutes une recette, je me doute que tu dois l'ajouter dynamiquement avec une page de saisie de recette dynamiquement ... donc lorsque tu saisie ta recette, tu devras ajouter une champs TAG ou tu écriras les tags que tu voudras associer a ta recette et tu les inscriras dans la table TAG_RECETTE!

EX : INSERT INTO RECETTE (1,'blablablablabla')
DO WHILE ...
INSERT INTO TAG_RECETTE (1,tag)

Ensuite de celà , il te faudras sur chaque page de recette augmenter les compteurs de 1 pour les tag assoscier à la recette, ou sur le clique du tag seulement ... celà dépend de ce que tu désires.

Par la suite, il ne te reste plus qu'Ã utiliser ma fonction de TAG CLOUD afin d'afficher les tag que tu vois .. je ne sais pas ce que tu as de programmer jusqu'Ã date, mais en pratique tu va devoir avoir une fonction de recherche derriere ... car exemple, lorsque tu cliqueras sur le tag 'PATATE' tu devras parcourir la table TAG_RECETTE et afficher tout les rectte qui on le tag patatte assoscier ... un INNER JOIN serait la meilleur solution ..

EX : SELECT R.Titre_Recette, R.LIEN FROM TAG_RECETTE TR, RECETTE R WHERE TR.ID_RECETE = R.ID_RECETTE

smilies/wink.gif Enjoy
merci
Ecrit par eMeRiKa, novembre 21, 2006
merci j'avais pas fait attention à la présence d'un forum!!
FORUM
Ecrit par Webmestre, novembre 20, 2006
Passe sur le forum, on va t'aider! smilies/wink.gif
Précision
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.

Ecrivez un commentaire
quote
bold
italicize
underline
strike
url
image
quote
quote
smile
wink
laugh
grin
angry
sad
shocked
cool
tongue
kiss
cry
Réduire l'éditeur | Agrandir l'éditeur

busy
Mis à jour ( Vendredi, 20 Avril 2007 09:06 )  

Sondage

Votre fournisseur Internet
 

Publicités