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.
- Archives de la Blogothèque, http://www.blogotheque.net/archives.php3
- Les thèmes du Portail des copains, http://rezo.net/themes
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(' ', ' ', $t);
$l = "<span style='font-size:".$s."px'>$t</span>";
$l = "<a href='".$url[$id]."'>$l</a>";
echo "$l \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 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(' ', ' ', $t);
$l = "<font size=$s>$t</font>";
$l = "<a href='".$url[$id]."'>$l</a>";
echo "$l \n";
}
?>
Discussions par date d’activité
4 discussions
Salut,
Merci pour ce code qui est exactement ce qu’il me fallait. Je suis tombé sur un bug. Ce que je dis est à prendre avec précaution car je débute sur SPIP.
Il y a une division par zéro lorsque l’article d’une rubrique n’a jamais été consulté. Sa popularité est alors de zéro. Si aucun article n’a été consulté, $maxpop est = 0 et c’est là que l’erreur survient.
Voilà comment j’ai rapidement « corrigé » le problème :
...
$maxpop = @max($pop) ;
if ( $maxpop < 1 ) $maxpop = 1 ;
foreach ($titre as $id => $t)
...
Répondre à ce message
Merci pour cette contrib que j’ai mis en place sur ce site : Actu-medias.fr
Répondre à ce message
Principe déjà en place sur Gastero Prod depuis quelque temps, il faudra que je compare nos codes respectifs... ;)
Bonjour Nicolas,
Sur votre site (http://www.gasteroprod.com/tags/), vous avez mis en place un système de Tag Cloud (affichage des mots-clés dont la taille de la police varie selon certains critères) présentés :
J’ai déjà testé tout ce qui est présenté sur divers sites SPIP en matière de Tag Cloud, mais aucun algorithme proposé ne permet le classement par ordre d’importance (il est en effet facile d’insérer les critères par titre, inverse, par hasard dans les boucles SPIP).
Pourriez-vous nous communiquer vos codes (algorithme) qui donnent sur Gastero Prod : http://www.gasteroprod.com/tags/ un résultat du plus bel effet ?
Dans cette attente et avec mes meilleurs messages.
François Daniel Giezendanner
Répondre à ce message
Existe aussi en version plugin sur la zone http://zone.spip.org/trac/spip-zone...
Et c’est en démonstration sur spip.blog
L’article du plugin et sa documentation est maintenant disponible sur spip-contrib
lire Nuage (de mots-clés) - version plugin
Répondre à ce message
Ajouter un commentaire
Avant de faire part d’un problème sur un plugin X, merci de lire ce qui suit :
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.
Suivre les commentaires : |