Afficher les mots-clés en faisant varier la taille de la police

Ceci est une ARCHIVE, peut-être périmée. Vérifiez bien les compatibilités !

L’idée est d’afficher les mots clés en vrac, en faisant varier la taille de la police en fonction du nombre d’articles associés au mot-clé. En d’autres termes, spip permet de créer des « tags » !

Vous ne connaissez pas les tags ? C’est le dernier truc en vogue sur les blogs et compagnie.

Il s’agit d’afficher en vrac dans une boite les mots-clés associés aux articles, en faisant varier la taille de la police selon l’importance du mot-clé.

Exemples :
http://www.technorati.com/tag/
http://www.flickr.com/photos/tags/

Dans le cadre de SPIP on se limitera aux mots-clés attribués par les auteurs dans l’espace privé.

Voici deux exemples qui montrent comment faire varier la taille de la police en fonction du « score » du mot-clé, calculé à partir du nombre d’articles qui lui sont liés, ou de la popularité de ceux-ci.

1) Le nombre d’articles associés au mot-clé

Dans cet exemple on fera varier la taille de la police entre 10px et 40px.

<?php
$pop = array();
<BOUCLE_mot(MOTS){par hasard}>
$titre[#ID_MOT]='[(#TITRE|texte_script)]';
$url[#ID_MOT]='#URL_MOT';
<BOUCLE_art(ARTICLES){id_mot}>
</BOUCLE_art>
$pop[#ID_MOT]=#TOTAL_BOUCLE; # Nombre d'articles pour ce mot
</B_art>
</BOUCLE_mot>

$maxpop = @max($pop); # Plus grand nombre d'article pour un mot

foreach ($titre as $id => $t) {
       $score = $pop[$id]/$maxpop; # entre 0 et 1
       if($score > 0.05){
         $s = ceil(30*$score);
         $s = 10 + $s;
         $t = str_replace(' ', '&nbsp;', $t);
         $l = "<span style='font-size:".$s."px'>$t</span>";
         $l = "<a href='".$url[$id]."'>$l</a>";
         echo "$l &nbsp; \n";
       }
}
?>

Pour ne pas surcharger, on a décidé de ne pas afficher, dans l’exemple ci-dessus, les mots-clés qui ne représentent pas plus de 5% du poids maximum.

2) La popularité du mot-clé

Dans cet exemple on fera varier la taille de la police de 1 à 15 en fonction de la popularité du mot-clé ; comme SPIP ne calcule que la popularité des articles, il faut additionner, pour chaque mot, les popularités de tous les articles liés à ce mot, ce qui donne le score du mot.

On modifie ensuite le profil de la répartition des valeurs avec une fonction choisie au pif pour qu’elle donne de jolies choses (en l’occurrence, ici, la fonction f(x) = x^{1.5} qui est concave mais pas trop — elle augmente les plus gros scores sans écraser les petits)...

<?php

$titre = $pop = array();
<BOUCLE_mot(MOTS){par hasard}>
$titre[#ID_MOT]='[(#TITRE|texte_script)]';
$url[#ID_MOT]='#URL_MOT';
<BOUCLE_art(ARTICLES){id_mot}{par popularite}{inverse}{0,200}>
$pop[#ID_MOT]+=#POPULARITE_ABSOLUE;
</BOUCLE_art>
</BOUCLE_mot>

$maxpop = @max($pop);

foreach ($titre as $id => $t) {
       $score = $pop[$id]/$maxpop; # entre 0 et 1
       $score = pow($score,1.5); # lissage
       $s = ceil(15*$score);
       $t = str_replace(' ', '&nbsp;', $t);
       $l = "<font size=$s>$t</font>";
       $l = "<a href='".$url[$id]."'>$l</a>";
       echo "$l &nbsp; \n";
}
?>

A noter : il existe aussi une version toute en filtres et balises de ce concept, voir l’article Un affichage fonction de l’importance relative dans le site.

Dernière modification de cette page le 2 août 2009

Discussion

4 discussions

Ajouter un commentaire

Qui êtes-vous ?

Pour afficher votre trombine avec votre message, enregistrez-la d’abord sur gravatar.com (gratuit et indolore) et n’oubliez pas d’indiquer votre adresse e-mail ici.

Ajoutez votre commentaire ici

Ce champ accepte les raccourcis SPIP {{gras}} {italique} -*liste [texte->url] <quote> <code> et le code HTML <q> <del> <ins>. Pour créer des paragraphes, laissez simplement des lignes vides.

Ajouter un document

Suivre les commentaires : RSS 2.0 | Atom