









Les nuages de mots sont à la mode en ce moment.
Le principe est simple, plus un mot (ou tag) est important plus il est écrit en gros.
Nous allons voir comment générer cette mise en page en php.
Avant de passer à la réalisation visuelle du nuage, il faut tout d'abord générer une liste de mots en incluant leur popularité.
Pour cela, nous utiliseront un tableau défini comme ceci :
//$cloud["mot"] = popularité; $cloud["wikistuce"] = 111; $cloud["php"] = 51; $cloud["flash"] = 8; $cloud["javascript"] = 32;
Ainsi, en parcourant le tableau nous seront capable de connaître le mot et sa popularité.
Tel quel, la tableau ne nous permet pas d'extraire toutes les infos utiles à la génération d'un tag cloud.
Il faut faire certaines opérations :
arsort($cloud); $max = current($cloud); $min = end($cloud); ksort($cloud);
Dans l'ordre :
$cloud = array_chunk($cloud, 9999, true); $cloud = $cloud[0];
Note : remplacez 9999 par le nombre de mot que vous désirez dans votre nuage.
Maintenant que nous avons la liste correctement triée, que nous connaissons la plus grande popularité ainsi que la plus faible, nous pouvons générer le nuage de mot :
//on commence par calculer un delta qui nous permettra de "regroupé" les mot qui ont une popularité relativement proche. $delta = ($max-$min)/8; //on initialise la variable qui contiendra le nuage de mot $cloudHtml = ""; //et on boucle sur chaque entrée de notre tableau foreach ($cloud as $word => $popular){ //Pour chaque popularité, on "calcule" quel est la classe que l'on doit appliquer. Chaque classe représente un groupe de popularité if ($popular < $min+round($delta)) $class = 'cloud1'; elseif ($popular < $min+round(2*$delta)) $class = 'cloud2'; elseif ($popular < $min+round(3*$delta)) $class = 'cloud3'; elseif ($popular < $min+round(5*$delta)) $class = 'cloud4'; else $class = 'cloud5'; //On ajoute les infos a notre variable de rendu. $cloudHtml .= '<a href="'.$link.'" class="'.$class.'">'.$word.'</a> '; }
Voici un css d'exemple a utiliser avec votre nuage de mot :
a.cloud1 { font-size: 10px; color: #F2951B; } a.cloud2 { font-size: 12px; color: #CC7D16; } a.cloud3 { font-size: 14px; color: #A66612; } a.cloud4 { font-size: 16px; color: #F24D1B; } a.cloud5 { font-size: 18px; color: #A53512; }
Discussion
Bonjour,
Merci pour ce script qui me permet de comprendre comment cela fonctionne. Je vais maintenant l'adapter à ce dont j'ai besoin.
Bonne continuation,
Sky