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

All contributions published for previous SPIP versions

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.

updated on 2 August 2009

Discussion

4 discussions

Comment on this article

Who are you?
  • [Log in]

To show your avatar with your message, register it first on gravatar.com (free et painless) and don’t forget to indicate your Email addresse here.

Enter your comment here

This form accepts SPIP shortcuts {{bold}} {italic} -*list [text->url] <quote> <code> and HTML code <q> <del> <ins>. To create paragraphs, just leave empty lines.

Add a document

Follow the comments: RSS 2.0 | Atom