Brian’s Latest Comments in Drupal

Jawel, ik begin er mij mee te amuseren, met Drupal.

Brian’s Latest Comments is een plugin voor WordPress, die een lijst van de laatste X becommentarieerde posts geeft, en per post Y commentaargevers weergeeft.

Het resultaat staat bijvoorbeeld rechtsboven op de home pagina van mijn eigen weblog, en ook bij Gentblogt. Een handig dingetje, en ik wou het ook hebben in Drupal.

Eerste halte: zoeken of er een module is die dat doet? Naaah. Ik weet op voorhand dat ik de tien laatst becommentarieerde artikels wil, en per artikel de laatste maximum tien commentaren, dus ik kan functionaliteit doodsimpel zelf maken.

En wel zo!

Ten eerste: een lijst van de tien recentst becommentarieerde artikels op de homepagina krijgen. Er zijn verschillende manieren, natuurlijk. Ik heb een view (“recent”) gemaakt van nodes van het type artikel, foto van de dag en agenda-item, aflopend gesorteerd op last comment time, en dan die view in een block gestoken dat enkel op de homepagina getoond wordt.

Ten tweede: een template aanmaken voor die view (in mijn geval was dat node-view-recent.tpl.php):

<?php
    echo "<p class=\"article\"><a href=\"$path\">$title</a> ";
    echo "(<a href=\"$path#comments\">$comment_count</a>)</p>";
 $comments=db_query("SELECT * FROM comments WHERE nid=%s ORDER BY timestamp DESC LIMIT 10", $nid);
 
 $i=1;
 echo "<p class=\"recentcomments\">";
 while ($comment=db_fetch_object($comments)) {
  echo "<a href=\"$path#comment-",$comment->cid,"\">",$comment->name,"</a>";
  if ($i!=$comment_count) echo ", ";
  $i+=1;
 }
 if ($comment_count>10) echo "...";
 echo "</p>";
?>

 Het begint met een regel per becommentarieerd artikel: titel van het artikel (met een link naar het artikel, $path), en totaal aantal commentaren bij het artikel (met een link naar het begin van de commentaren, $path#comments).

En dan per artikel een query die comment-ID en naam van commentaargever uit de comments-tabel haalt, aflopend gesorteerd en beperkt tot de laatste tien.

Die query wordt afgelopen, en per comment komt er de naam van de commentaargever en een link erop naar dat individuele commentaar, $path#comment-[comment-ID].

Omdat de kleine details het maken: komma’s tussen alle namen, geen komma na de laatste naam, en “, …” als er in totaal meer dan tien commentaren zijn voor dat artikel.

Het heeft langer geduurd om dit te schrijven, denk ik, dan om het te maken met Drupal.

En jazeker: ongetwijfeld kan het sneller en properder en beter, maar hey: het werkt en het doet wat het moet doen.