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.

Discussion

4 discussions

Add a comment

Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :

  • Désactiver tous les plugins que vous ne voulez pas tester afin de vous assurer que le bug vient bien du plugin X. Cela vous évitera d’écrire sur le forum d’une contribution qui n’est finalement pas en cause.
  • Cherchez et notez les numéros de version de tout ce qui est en place au moment du test :
    • version de SPIP, en bas de la partie privée
    • version du plugin testé et des éventuels plugins nécessités
    • version de PHP (exec=info en partie privée)
    • version de MySQL / SQLite
  • Si votre problème concerne la partie publique de votre site, donnez une URL où le bug est visible, pour que les gens puissent voir par eux-mêmes.
  • En cas de page blanche, merci d’activer l’affichage des erreurs, et d’indiquer ensuite l’erreur qui apparaît.

Merci d’avance pour les personnes qui vous aideront !

Par ailleurs, n’oubliez pas que les contributeurs et contributrices ont une vie en dehors de SPIP.

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