Top commentateurs
Par NiKo le lundi 23 mai 2005, 17:26 - Dotclear
- Lien permanent -
53 commentaires -
Tags :
Toujours aussi inutile, toujours obstinément pas indispensable, une nouvelle fonction maison pour Dotclear : le Top Commentateurs (désolé, ça sonne naze, j'ai pas trouvé mieux; vos suggestions sont les bienvenues).
Cette fonction, comme son nom ne l'indique pas, permet d'afficher la liste des pseudos sous lesquels ont été posté le plus de commentaires sur votre blog. Petit raffinement, on peut lui passer un argument optionnel permettant d'exclure une série de pseudos 
Ajoutez ce code dans votre fichier prepend.php du répertoire de votre thème courant :
/** * @function dcMeilleursCommentateurs v0.2 * * Cette fonction effectue une requete sur la table des commentaires afin * d'en extraire la liste des auteurs les plus prolixes, et de les afficher * ainsi qu'eventuellement un lien vers leur site. * * @param integer $nb Nombre de noms de commentateurs a afficher (default: 5) * @param array $exclure Tableau des pseudos a exclure de la liste (default: empty array) * @param boolean $display_site Affiche ou pas un lien vers le site du commentateur (default: false) * */ function dcMeilleursCommentateurs($nb=5, $exclure=array(), $display_site=false) { GLOBAL $blog; $con = $blog->con; $nb = is_int($nb) && $nb > 0 && $nb <= 100 ? $nb : 5; $reqPlus = ''; if (!is_array($exclure) || count($exclure) == 0) { $do_exclure = false; } else { $do_exclure = true; for ($i=0; $i<count($exclure); $i++) { $reqPlus .= "AND comment_auteur != '".str_replace("'", "\'", $exclure[$i])."'"; } } $sql = 'SELECT DISTINCT(comment_auteur), COUNT(comment_auteur) AS nbposts, MAX(comment_site) AS comment_site FROM dc_comment WHERE 1 '.$reqPlus.' GROUP BY comment_auteur ORDER BY nbposts DESC, comment_site ASC LIMIT 0, ' . $nb; if ($rc = $con->select($sql)) { if ($rc->int_row_count > 0) { $pos = 0; echo '<ol>'; while ($rc->fetch()) { if ($do_exclure == false || !in_array($rc->f('comment_auteur'), $exclure)) { if ($display_site == true && $rc->f('comment_site')) { $auteur = '<a href="http://'.$rc->f('comment_site').'" rel="nofollow">'.$rc->f('comment_auteur').'</a>'; } else { $auteur = $rc->f('comment_auteur'); } echo '<li><strong>'.$auteur.'</strong> ('.$rc->f('nbposts').')</li>'; } } echo '</ol>'; } else { echo '<p>Aucun commentaire.</p>'; } } }
Cela s'utilise comme suit, par exemple dans votre fichier template.php du thème courant :
<?php dcMeilleursCommentateurs(5, array('NiKo', 'Jean-Pierre Rafarin', 'MecQueJ\'AimePas', 'Spammeur-Man'), true) ?>
Le premier paramètre permet de spécifier le nombre de pseudos à afficher (5 par défaut), le deuxième est un tableau contenant les pseudos à exclure de la liste et le troisième spécifie si vous désirez afficher un lien vers le site du commentateur.
Enjoy 
Edit
Suite à la remarque de kNo', voici une altération de la table dc_comment ajoutant un index sur le champs comment_auteur, déstinée à alléger la charge généré par l'execution de la requête utilisée par la fonction :
ALTER TABLE dc_comment ADD INDEX idxauteur ( comment_auteur );
N'étant pas expert absolu en SQL, je demande validation du principe aux sommités parcourant ce billet ![]()
Edit 2
Mise à jour de la fonction en version 0.2, avec un nouveau paramètre qui permet de spécifier si l'on veut afficher un lien vers le site du commentateur. C'est de la bouillie de bidouille SQL, j'ai honte[1], mais ça tient en une seule requête, et je n'en ai pas de trace dans mes slow_queries.
Pour éviter que cette fonction ne se transforme en véritable appel au SPAM de commentaires, j'ai ajouté l'attribut rel="nofollow" aux liens générés, et ce afin de dissuader les éventuels spammeurs.
Notes
[1] D'ailleurs si quelqu'un a quelque chose de plus optimisé, qu'il ne se gêne pas pour le signaler 
53 commentaires (Ajouter un commentaire)
Oui, je viens de changer la limitation à 200 et de demander les 150 meilleurs commentateurs.
La limitation à 100 vient t'elle d'une volonté de ne pas surcharger les serveurs par une requête un peu trop gourmande ?
Puis-je mettre une limitation largement supérieure et demande un grand nombre de commentateurs dans la ligne de commande afin de ne pas avoir à modifier mon code régulièrement avec l'augmentation du nombre de commentateur de mon blog ?
Merci...
Hugues > Sur ton bog, j'en vois 103
Merci pour le plug-in.
Par contre, j'ai crée une page "Related" avec tous les commentateurs de mon blog et je me suis rendu compte que la limite était de 100. Pourquoi cette limitation ?
Je ne connais pas ce plugin, mais si la table des commentaires est la même que celle existante de dotclear, oui. Sinon, non
Est-ce qu'il est possible de comptabiliser les commentaires posté via le plug-in Gallery ?
Attention, tu as mis un "s" de trop ! C'est donc :
UPDATE dc_comment SET comment_site="www.site.fr" WHERE comment_auteur="nomducommentateur"
Ensuite, ça ne se mettait pas à jour dans le blog. Il m'a suffit de laisser un nouveau commentaire pour que cela soit mis à jour.
Merci beaucoup !!
Il faut mettre à jour les champs comment_site correspondant à ton pseudo dans la table dc_comments. En gros, sans tester : UPDATE dc_comments SET comment_site="www.monsite.com" WHERE comment_auteur="MonNick"
Tiens moi au courant !
Bonjour,
J'ai un léger souci.
Mon blog a migré récemment, si bien que dans mes commentaires le plus anciens, j'ai mis l'ancienne adresse du site (omeg.free.fr/blog) alors que dans les commentaires les plus récent, j'ai évidemment mis ma nouvelle adresse.
Par contre, avec le plug'in, c'est l'ancienne adresse qui se lance si je clique sur mon pseudo dans la liste des meilleurs commentateurs...
Y'a t'ill un moyen d'y remédier ?
Merci,
--
Hugues
si j'ai mis un truc poru éviter quont prenne les photos c'est juste pour avertissement et c'est pas simaps de donner l'astuce
c'est pas toi qui va te faire tapper sur les doight lol merci de ta compréhension
Ah oki

C'est un blog que j'ai fait pour ma copine et jdébute donc bon c'est pas le top par rapport au blog d'ici mais jsui quand meme content de mon boulot
blackflavour.free.fr
Il faut que tu rajoutes
$pos++;juste avantSinon il a une URL ton blog ?
Dans template.php j'ai ca :
<div id="Top5">
<center><?php dcMeilleursCommentateurs(5, array('test', 'yep'), true) ?></center>
</div>
Et donc comme tu m'as j'ai mis les id dans le css :
#Top5 li.jaune, #Top5 li.jaune a {
color: #yellow;
}
#Top5 li.gris, #Top5 li.gris a {
color: #grey;
}
#Top5 li.normal, #Top5 li.normal a {
color: #black;
}
Et puis j'ai changer par ca dans predend.php :
echo '<li class="' . (($pos==1) ? 'jaune' : (($pos==2) ? 'gris' : 'normal')) . '"><strong>'.$auteur.'</strong> ('.$rc->f('nbposts').')</li>';
Et ca marche pas pourtant je pense pas avoir fait d'erreur
Merci bien j'ai compris
ca logique en plus lol merci chef
Il faut que tu ajoutes les définitions de style pour tes éléments de liste, dans la feuille de style de ton thème :
#tondiv li.jaune, #tondiv li.jaune a { color: #yellow; } #tondiv li.gris, #tondiv li.gris a { color: #grey; } #tondiv li.normal, #tondiv li.normal a { color: #black; }Evidemment,
#tondivest l'id du tag contenant ta liste.Si tu ne comprends rien à ce que j'écris, je te suggère la lecture de ces différents articles et tutoriaux sur l'épineuse question de la mise en forme CSS
j'ai laisser comme c'était
tu peut m'expliquer clairemant comment on procéde poru définir les style de couleur sil te plait?
As-tu bien défini tes styles li.jaune, li.gris et li.normal ?
peut etre que je fait une fausse manip mais rien de ce que vous mavez marqué fonctionne
si quelqu'un pouvez tester un code qui marche merci
Allez, soyons fous :
Non non, il n'y a qu'un seul point-virgule, en fin de ligne
Le pire c'est que je me suis dis que quelqu'un allait me sortir cette version
switch ($pos) {
case 1: $classe = 'gris'; break;
case 2: $classe = 'jaune'; break;
default: $classe= 'normal';
}
echo '<li class="' . $classe . '"><strong>'.$auteur.'</strong> ('.$rc->f('nbposts').')</li>';
//désolé, j'sais pas faire la mise en forme du code... et la flemme de chercher.
Patch express non testé (j'aime les défis) - Remplacer la ligne :
Par :
Il ne restera plus qu'è définir les style
jaune,grisetnormalComment pourrais t'on faire pour que le premier soit de couleur jaune le deuxiéme de couleur gris ???
2 suggestions pour le nom de ton plugin :
> top-speakers
> top-annotateurs
Ok c'est pas top
wouaaah en plus je m'instruis : j'avais oublié l'existence de "MAX", enfoui dans mes vieux cahiers de cours de SQL d'il y a 5 ans... merci
"Une autre idée est d'associer cette fonction avec le plugin Évaluation des commentaire : la note moyenne globale obtenue par l'ensemble des commentaires de chacun des intervenants sur le blog... J'ai la flemme :p"
Le plugin ne permet pas de noter les commentaires... Si ? (Je vois "Evaluation des billets"). Enfin bref, j'avais eu une idée similaire ... Voir deuxième partie de ce billet : www.aen0.peewi.org/blog/i...
> D'ailleurs ça me fait penser qu'il ne vaut mieux pas qu'il y ait un lien vers les
> sites des commentateurs, sinon là c'est carrément de l'incitation au spam
et c'est maintenant que j'ai réussi et que j'ai mis ça sur mon blog que tu soulèves ce problème et m'y fais penser ?
bah tant pis...
Et t'es fier de toi en plus
C'est clair ! D'ailleurs ça me fait penser qu'il ne vaut mieux pas qu'il y ait un lien vers les sites des commentateurs, sinon là c'est carrément de l'incitation au spam
C'est de l'incitation au flood de commentaires ton truc lol
merci beaucoup pour ce superbe plug-in... j'en ai même profité pour dédoubler ma sidebar, qui fait aussi 18m de long
on m'a moi aussi déjà réclamé le coup du lien vers le site internet... je suis pas trop une lumière en SQL mais si je trouve, je te dis
Disons qu'elle fait déjà 18 mètres de long :o
D'ailleurs, ce design commence à m'ennuyer, il faudrait que je commence à réfléchir à un nouveau thème...
NiKo la pataaate !
Non sérieux bravo et merci pour tous ces plugins bien sympas
Fais gaffe à ce rythme là ta sidebar va faire 18 mètres de long dans pas longtemps
Arf, j'y ai pensé... Mais le champs email est facultatif, le site internet aussi, y'a que le pseudo qui est obligatoire... et donc toujours présent en base.
Une autre idée est d'associer cette fonction avec le plugin Évaluation des commentaire : la note moyenne globale obtenue par l'ensemble des commentaires de chacun des intervenants sur le blog... J'ai la flemme
Pour le peu qu'on change de pseudo ça serait pas mieux sur les mails ? (comme il dépend aussi du gravatar
)
Je note dans un coin, ça pourra me servir quand j'aurais plus d'un lecteur
Bon 100 ça va être un peu pénible hein ...

Nana mais sérieux l'idée est pas mal du tout
On s'y met ?
Sparti
T'as pas peur de faire exploser ton serveur avec des fonctions comme ça ? ^^
Le premier a 100 posts
Comme UrukHai moi aussi j'adore trainer sur ce blog on y trouve toujours des trucs délires
Bravo pour ce nouveau petit truc de geek carrément pas utile mais du coup indispensable
Je sais que je me répète mais je le dit haut et fort :
Niko est le roi de la geekerie
Sérieusement, à chaque fois que je viens sur ton blog, il y a un nouveau truc.
Pour de bon ça m'éclate
Continue comme ça Niko et merci
"roi d'la critque"
Dommage qu'il faille indiquer les pseudo. Le top c'est qu'il calcule automatiquement le nombre de post pour tous les intervenants et affiche le top 5.
Euh sinon si tu changeais Commentateurs par Blablateurs ?
Mais laissez le bon sang mon plugin pour faire le café il va jamais se faire
Oki pour la requête (c'était une simple interrogation de novice que je posais là aux spécialiste :)).
lol
Il ne te manque plus qu'à compléter l'outil avec toutes les stats possibles et immaginables alors (cf post sur jehaisleprintemps)
j'adore! c'est geek comme pas permis, tu es génial NiKo
Yazerty > Une requête par page consultée (on a vu pire)

Par contre devine où j'ai puisé cette idée ? Si, si, fais un effort

Mathieu > J'y travaille, j'y travaille
Titus > Moi ?!? Là, tu me fais de la peine
kNo' > Bonne idée l'index
...
...
...
jehaisleprintemps.net/sta... (en bas)
... Si ce n'est déjà fait.
(nan, promis, j'arrête...)
Au fait ! Pour réduire sérieusement la charge serveur au moment du calcul des top-commentateurs... Rajoute un index dans la table des commentateurs sur le champ "nom ou pseudo", tu verras que ça va sérieusement améliorer les perfs.
ah ben mairdalor, j'suis preums. J'pensais pas que je disais autant d'âneries que ça, tiens.
Je me demande aussi si ça va pas malheureusement encourager les flooders en tous genres, prêts à répondre "ouais, j'suis tout à fait d'accord") dès que possible pour faire monter leurs scores.
Haha, si ça c'est pas de l'incitation à laisser un commentaire
Mais c'est du tout bon ce truc... bon avec tous les plug-ins existants les blog DotClear vont devenir des vraies usines a Gaz manque plus qu'elles fassent le Café
Pas mal :-).
Par contre ça ne risque pas de prendre des ressources sql ce genre de requête :-?
La discussion continue ailleurs
Réorganisation du sidebar
Petites modifications de la sidebar à droite. On remonte un peu les stats pour les mettre un peu avant ^_^ . Et puis ajout du Top 5 Grosses gueules qui est en fait le Top commentateurs (arf ça sonne très mal ici aussi) de NiKo...