Fils de discussion dans Dotclear
Le mercredi 27 mai 2009, 13:14 - Lien permanent
Comme il ne faut pas s’arrêter en si bon chemin (et que ma boîte fait le pont de l’ascension…), je me suis attelé à un nouveau plugin Dotclear. Il s’agit d’une fonctionnalité que j’aimais bien dans SPIP : la possibilité de voir les commentaires par fils de discussion.

Bundles of cotton thread par
Unhindered by Talent
L’avantage des fils de discussion
En effet, quand un article commence à avoir beaucoup de commentaires (par exemple celui-là), il devient difficile de savoir qui répond à qui. Une convention est née : préfixer sa réponse par le signe “@” suivi du nom de la personne à qui on veut répondre. Il existe même un plugin Dotclear appelé @Reply pour pré-remplir la fenêtre d’ajout de commentaire avec ce préfixe, simplement en cliquant sur un bouton.
C’est très bien, mais ça n’aide pas beaucoup à la visualisation. Le mieux serait, selon moi bien sûr, de placer les réponses sous les commentaires auxquels elle répondent, en les indentant de quelques pixels.
La méthode
Malheureusement, comme la réponse à un commentaire n’est pas prévue par le moteur de Dotclear, on ne peut pas trouver dans la base de données la référence au commentaire auquel répond un autre commentaire. Pour recréer les fils de discussion, j’ai donc décidé de m’appuyer sur la convention “@”, et notamment sur le lien qui est généré par le plugin @Reply. Cette méthode est la meilleure que j’ai trouvée, mais elle a tout de même deux inconvénients :
- le commentaire ne se retrouvera pas au bon endroit dans les fils de discussion si le visiteur n’utilise pas le bouton @Reply
- on ne peut pas répondre à deux commentaires dans le même commentaire (mais ça je vois pas bien comment faire autrement…)
Donc ce n’est pas parfait, mais c’est déjà “suffisamment bien” pour moi.
La réalisation
Ce plugin fonctionne à 100% en javascript, à l’aide de jQuery. Le principe est simple : on ajoute un bouton pour activer la vue en fils de discussion, et en arrière-plan on prépare une liste des commentaires dans laquelle chaque élément a comme attribut supplémentaire le numéro du commentaire auquel il répond.
À l’activation de la vue par fils de discussion, on vide complètement la zone de commentaires, et on les réinsère les uns après les autres. Si un commentaire répond à un autre commentaire, il est inséré après celui-ci, et on lui ajoute une marge à gauche pour l’indenter.
Comme toujours, la complication est dans les détails :
- quand on insère une réponse, il faut l’insérer après les autres réponses au commentaire.
- il faut ajouter une marge de plus en plus grande au fur et à mesure des réponses, mais pas trop grande pour ne pas écraser le commentaire à droite
Enfin voilà, vu de chez moi, ça marche. J’avais peur que ce soit extrêmement lent, mais en testant sur un de mes articles qui a eu beaucoup de commentaires, je n’ai pas constaté de lenteur excessive.
Je n’ai qu’un bug à déplorer : l’indentation du commentaire fait perdre les deux angles arrondis de droite. C’est dû à l’image de fond utilisée pour simuler les bords arrondis, peut-être que si j’ai le courage je corrigerai ça.
Le code
Si vous voulez l’essayer chez vous, j’attache le code packagé à cet article. Le fichier Zip est prêt à installer, et contient toute la plomberie Dotclear qui va bien (interface d’administration, aide en ligne, traductions, etc). Le code est sous licence AGPL (qui est plus ou moins la GPL des applications web).
Je vais le laisser tourner ici quelques jours, voire semaines, avant de le proposer au “lab”. Comme toujours, si vous ou l’un de vos collaborateurs étaient pris ou tués, le Département d’État nierait avoir eu connaissance de vos agissements. Euh, non, remontez-moi les bugs, quoi. Bonne chance Jim.
















Commentaires
mercredi 27 mai 2009, 14:52
Personnellement, je ne supporte pas les “fils de discussion” avec les réponses qui se trouvent indentées sous le message en question (comme sur linuxfr) : l’ordre des messages n’est plus chronologique, et ça devient difficile de s’y retrouver pour voir si un nouveau message a été posté.
mercredi 27 mai 2009, 15:11
@®om : Un petit test pour voir que ça donne.
En voyant ton message sur Identi.ca, j’ai cru que tu avais installé l’extension Agora.
mercredi 27 mai 2009, 15:35
@®om : Je te conseille d’aller voir un autre article qui a provoqué pas mal de discussion. C’est difficile à lire sans arborescence. Pour être tenu à jour des nouveautés, il y a toujours le flux RSS ou l’abonnement par mail.
J’imagine que sur les vrais sites de vrais gens qui ont des choses vraiment intéressantes à dire, ça peut être très utile (je pense par exemple au Standblog).
@Osku : Si j’ai bien compris, Agora est un système de forums de discussion, non ? Donc assez différent de ce que j’ai fait, a priori on se superpose pas… (et heureusement, mon plugin c’est 1 ou 2 jours de boulot, pas plus)
mercredi 27 mai 2009, 16:02
intéressant, mais quid de ceci (j’en profite pour faire le test discrètement, à peine déguisé le mec :D )
@Aurélien :
apparemment le lien “répondre à ce commentaire marche pas quand on est en vue “fil de discussion”. Bizarre, mais là j’ai essayé sans fil, ça marchait, je passe en fil, je refais un “répondre” sur un autre commentaire, et puf, ça marche plus
@Osku :
tiens, je connaissais pas Agora, intéressant ^^
mercredi 27 mai 2009, 16:05
@@kim :
pour le souci de lien, bizarre, un rafraichissement de la page a résolu le souci…
Sinon ça confirme mes soupçons : les fils de discussion, c’est bien, mais là par exemple dans mon commentaire précédent, je faisais réponse à deux commentaires, il n’y a pas forcément de raison de privilégier l’un par rapport à l’autre, ce qui fait que :
@®om :
je rejoins ton point de vue, les fils c’est bien, mais on perd la possibilité de double référencer (voire plus)
mercredi 27 mai 2009, 16:37
@@kim : Pour le lien “répondre”, tu as trouvé un bug ! En effet, quand je génère l’arborescence, je perds les actions associées aux boutons répondre. Il faut que je corrige ça. Merci pour le test !
Sinon pour le fait de répondre à deux personnes, il n’y a effectivement pas de raison de privilégier l’un ou l’autre, donc j’ai choisi arbitrairement de ne prendre en compte que le premier. Si tu as une meilleure idée, ça m’intéresse beaucoup !
Note que tu peux toujours écrire ce que tu veux dans le message, donc tu as toujours autant la possibilité de répondre à plusieurs personnes qu’avant.
mercredi 27 mai 2009, 16:47
@Aurélien :
Note que tu peux toujours écrire ce que tu veux dans le message, donc tu as toujours autant la possibilité de répondre à plusieurs personnes qu’avant.
Tout à fait.
Pour une meilleure idée, je sais pas… Couper le commentaire, mais là encore, si une partie n’est en réponse à personne (par exemple je répond à X, puis à Y, puis je rajoute quelque chose), on peut pas le gérer. On peut aussi imaginer une duplication du commentaire, mais là, c’pas terrible terrible… En fait cette histoire va t’amener à vouloir essayer de représenter le plus intuitivement possible un graphe orienté. Et là, c’est le merdier si on veut garder le mode linéaire d’un fil de discussion…
J’ai vu une fois un moyen de détourner le problème en faisant inversant le concept : on garde un fil à plat, mais si je cite quelqu’un, en cliquant sur le lien du commentaire, au lieu de faire une ancre vers le commentaire, on fait un jquery sur le-dit commentaire, et on l’affiche en popup js/css…
mercredi 27 mai 2009, 16:53
@@kim :
Ouh, c’est pas con du tout ça ! Ca me plaît bien. Faudra que j’essaye un truc du genre pour voir ce que ça donne.
Mais bon, je suis aussi un grand fan des fils de discussion, donc ça sera en supplément bonux
Sinon pour le bug, c’était vraiment tout con, j’ai corrigé, et j’ai mis à jour le fichier zip.
jeudi 28 mai 2009, 22:14
anonyme!!!!
jeudi 28 mai 2009, 22:14
@Anonyme : En effet
mardi 15 décembre 2009, 04:22
Cest quand meme mieux que Miss France