by Jeff Robbins on July 12, 2006 // Short URL

Drupal Usability: Comment Configuration

Drupal offers many different settings for displaying and collecting comments. Listings can be displayed in forward or reverse chronological order, and comments can be displayed in a tree-like hierarchy so that it is possible for people follow the thread as users comment on comments.

However from a usability standpoint, most of these options are NOT GOOD.

In this article, I'm going to run through the various Drupal comment options and the pros and cons of each setting.

Viewing Options

Display Mode

Collapsed vs. Expanded

From the "I Don't Know Why Drupal Even Has This Option" department comes the "collapsed" option which breaks every comment out onto its own page. This makes it virtually impossible to follow series of comments because reading each requires clicking on its title in the list, reading it, hitting the back button, and scrolling down to try to find your place in the comment listing. Does anyone use this? Use expanded.

Threaded Lists

While this option looks useful on its surface, in use it means that comments will no longer be listed in chronological order. By placing listings in a threaded list, comments are listed by thread before they are listed by date. So the latest posts will not necessarily be at the bottom of the page. In addition, many users don't understand the concept of the threaded comments and will click on any "reply" link splitting off a thread when they really mean to respond to the original post. Keep in mind that you want the users to post ON THE TOPIC OF YOUR POST and NOT to wander off onto tangental subjects. You want comments on any given node to be ABOUT THAT NODE. If the subject of a discussion changes, it should move elsewhere. People will not come to an entry entitled "Drupal Comment Usability" to find discussion about configuring clean urls - so your user interface should discourage this type of tangental commenting.

Display Order

While it is the convention of blogs to show the latest blog entries at the top of the page, do not get confused and believe that comments should be handled the same way. Most visitors to a web page will expect that they will be able to follow the history of a page by reading from top to bottom. This means that the latest comments should be listed at the bottom therefore comments should be listed oldest first.

Comment Controls

By enabling comment controls, it is possible to allow the users to configure any of the above settings themselves - essentially destroying any comment configuration that the administrator has done. I'm from the school of: "Give the options to the administrators, NOT to the users". It will be the novice users who arrange their settings so that they can no longer follow the comments. They will call you on the phone asking what has happened to your site. I recommend setting comment controls to "do not display".

Comments Per Page

While shorter pages are generally more usable, setting the number of comments per page to a low number comes in conflict with my recommendation of setting the display order to oldest first. With a small number, it is very possible that the latest comments will not be listed on the initial page and will require several clicks and scrolling to get to them. This is bad. A better solution is to set the comments per page as high as possible. Users will intuitively scroll down to find the latest stuff.

Posting Settings

Anonymous Commenting

Anonymous commenting is good. Most users will not want to register for a site simply to post a comment. However allowing random comments opens up a site to comment spam. These comments are placed on sites across the net in order to link people to a commercial (usually gambling or porn) site and also to increase the site's Google ranking.

A solution to this problem is to visit admin/access and set permissions so that anonymous users can post comments, but their comments will require approval. Then either visit admin/comment/list/approval on a regular basis to see if there are new comments or use a solution like Comment Mail module or Actions and Workflow (untested) to have email sent to the site administrator when new comments (requiring approval) are posted to the site.

Contact information for anonymous users can be optional, required, or not collected at all. I prefer the optional option so that users can post to the site anonymously or give themselves credit if they choose.

Anonymous commenting is enabled on the "administer >> access" page in Drupal.

Other Comment Options


Subject Field: Technically speaking the subject of most comments will be the post itself. So the comment subject line often ends up being something like, "Agreed" or "Another thought", which doesn't really mean much. However the comment subject line is used in the comment block and several other places in Drupal where comments are listed. If it is not enabled, Drupal will use the first few words of the post as the subject line. It's a close call on this one, but I'm going to recommend leaving it enabled.


Preview Comment: Requiring comments to be "previewed" before posting provides another line of defense against comment spam. And since anonymous users will not be able to edit their comments once they are posted to the site, it is also a last chance to review their post before it is committed. However, from a usability standpoint, the idea of adding an extra screen to the posting process is confusing. Many users will get to the preview screen and assume that since they are seeing their comment presented on the screen, the comment has been posted to the site. They could navigate away and never have their comments actually posted.

My recommendation: If you're site has primarily registered users, do not require preview. If you're site has primarily anonymous (non-logged-in) users, do require preview.


Location of Comment Form: This one really depends on the design esthetic of your site. You can choose to place the comment form at the bottom of the comments on the post page, or on a separate page. From a usability standpoint it is clearer to a user that they CAN post a comment if there is a form presented right there at the bottom of the comments. It really comes down to how hard you want to push for comments to your posts. So basically, if it doesn't turn your designer's stomach, place the comment form at the bottom of the post page.

Jeff Robbins

Co-Founder & CEO

Want Jeff Robbins to speak at your event? Contact us with the details and we’ll be in touch soon.

Comments

Borek

Thanks for good article but

Thanks for good article but I'd like to add some comments:

1) Threaded vs. Flat: I would be very careful to make any recommendations. While your points are valid, there are also many reasons why one could prefer threaded comments. My observation is that blogs and personal websites use flat comments while webzines and “bigger websites” use threaded style.

2) I’m clearly against moderation. Imagine that I visit some very interesting blog post; don’t see any comments yet and therefore write a very thoughtful reply. But when I visit the same site hour or two later, my comment is the 7th one and repeats the same points that other commentators already made. I always feel somehow stupid. But for some heavy-traffic sites with many trolls around, moderation is unfortunately the only way.

3) Required comment preview is a very powerful anti-spam technique. (But I agree that it can be somehow confusing to visitors.)

4) Drupal suffers from one very bad usability issue – it doesn’t have “remember me” checkbox for anonymous posters. It’s not hard to develop a custom module but you’re completely lost if the caching is enabled. Then, there’s no way to provide “remember me” functionality. Bad, bad, bad.

Reply

charlie

flat comments in blogs

Flat comments in blogs seems mostly likely derived from the limitations of the software. I can remember as blogs were catching on (particularly Blogger and MT) that the only viewing option they provided was flat. Used to bug me (and still does) and I suspect many other people who were used to web-based discussion forums which often offered a threaded view. Now we have a whole new generation of Internet users whose primary experience with discussion boards seems to have been with blogs and, as Jeff points out, are confused with threaded discussion.

Seems a step backwards in electronic communication literacy, which raises the question which is more efficient to use--flat vs threaded? I agree with your observation that there are many reasons why threaded might be preferable. I can't imagine using Slashdot with flat comments. It's not always advantageous to deprecate an efficient, advanced feature in software. After all, the feature is there to improve the user experience. They just have to learn how to use it.

Reply

moshe

interesting premise

this one comes from the "jeff's configuration preferences should be evenryone's preference" school :)

i agree on almost all points.

Reply

Charlie

location of comment submission form

"This one really depends on the design esthetic of your site."

Actually, if using threaded comments, I believe that you should set this to "display on separate page" based on the observation about user problems with replying properly in threaded display. When the comment form appears on the page of the node, they are more likely to be drawn to it instead of the "reply" link with each comment.

Reply

jeff

re: location

True. But I've also seen a lot of people click the "reply" on the last comment in order to leave a comment on the original post. This is really an argument against threaded comments more than form display though.

Reply

Day Barr

re: re: location

Is it just me... or are the comments on this very article displayed as threaded? Perhaps you've changed your mind, Jeff? I guess a lot can happen in 2.5 months... ;)

Reply

the daniel

Thanks for this article, the

Thanks for this article, the discussion system in drupal has bothered me since I first started using it, and it's edifying/encouraging to see a reasoned analysis from a drupal pro.

Reply

Barry

Down with comment subjects!

I completely agree with the premise of this post that some of Drupal's comment options make no sense. I also agree with most of Jeff's choices.

I'll add my pet peeve, though: COMMENTS SHOULD NEVER HAVE SUBJECTS. Never. Not just no Subject field, but NO SUBJECT AT ALL. A comment is about the post, so the subject is the post. If you provide a field, people put content in the field which is confusing. If you don't provide a field, the subject ends up being the unintelligible first few words. Solution? Comments should be identified by Author and Date, and just not show a subject at all.

Aren't religous issues fun? :-)

Barry

Reply

jeff

Agreed

Yeah... I'm inclined to agree with you, Barry.

Reply

jeff

Theming!

In order to suppress the output of comment subjects, you should open up the comment.tpl.php file in your (PHPTemplate-based) theme and change this line:

<h3><?php print $title ?></h3>

to this

<?php if (variable_get('comment_subject_field', 1)) { ?>
<h3><?php print $title ?></h3>
<?php } ?>

Now that I think about it, this should really be the default code.. Perhaps I'll roll a patch.

Reply

Patrick Harris

Bug with flat comments

I totally agree that threaded comments are confusing for many people, and I personally am not that fond of them. However, one huge drawback to flat comments in Drupal is that if the author of a comment edits their comment, the comment's creation date is altered, and the comment then appears out of order (and context) as the latest comment.

If the admin edits a comment this does not happen.

How has this unintuitive behaviour stayed in Drupal for so long? Is it because no-one uses flat comments?

Reply

jeff

Wow!

I didn't realize that. You should definitely post that as a Drupal bug at drupal.org.

Reply

catch

The comment timestamp bug is

The comment timestamp bug is a very, very annoying one. In terms of display I think it's got something to do with the fact that comments are still threaded in the database even if displayed flat > expanded.

issue here:
http://drupal.org/node/55277

the flat comment module which makes all comments children of the node and fixes the visual side-effects of this.

Reply

emmajane

+1

I agree on that patch being submitted (assuming it hasn't already). I think it's silly that if the option to enter a subject is turned off that the subject is still displayed in the comments (which just shows the first 20 or so characters of the comment as the subject).

Reply

Tania

Does this work in V6

Very helpful post on comment settings.

I'm not keen on the default layout of comments in version 6 with the Subject and then the text immediately below. Very confusing.

I was hoping to hide the Subject so was very please with your code suggestion but I tried it and was unable to get it to work. Actually I think I am modifying the wrong file as NO changes are made at all even if I make a simple font colour change. The themeing aspect of Drupal I haven't got my head around yet. I was modifying the comment.tpl.php of my custom theme "tania" (sites\all\themes\tania).

I actually like the format of Comments here, where the subject line is clearly separated from the comment body. Could you give a few tips on getting the presentation like this?
Many thanks
Tania

Reply

bruno

Another setting :-)

One comment setting I miss in Drupal is the possibility to have all comments 'one click away': ie users would be presented a collapsed list of comments, and when they click a comment, they all become expanded. That way, on news websites for instance, you could have a 'clean' article page, with a list of (comment) links underneath, instead of immediately showing (sometimes very long threaded or flat lists of comments). Plus it would give Drupal admin another way of pushing / not pushing users to comment on the site.

Reply

Anonymous

Collapsable comments

http://drupal.org/node/105658

Collapsable comments are fully implemented.
I even had karma module attached in order to have slashdot-like moderation system. Unfortunately after introduction of JQuery the whole thing was broken.

Can anyone help me?

Delf.
P.S. Does anyone plan implementing comments as nodes?

Reply

Alex

Moderation Legalities

I ran into a post a while back that got me thinking about moderating comments. Aaron, from SeoBook.com, got sued for a comment someone left in his blog that supposedly disclosed a trade secret. A huge discussion ensued, and Paul P chimed in with the following:

"If you *ever* delete or edit a comment, then your legal position changes from a "common carrier" (like the phone company) to a "publisher" (like the NY Times) and you are then indeed responsible for all comments and material on your site, like it or not. A disclaimer doesn't matter, either."

Very interesting, although Aaron won the suit regardless (he moderates his comments). I am still in favor of moderating comments, for the primary purpose of stopping spam.

Reply

ahoeben

collapsed comments

For a forum with a 'collapsed comments' that does make sense, have a look at the DPReview forums, eg:
http://forums.dpreview.com/forums/read.asp?forum=1000&message=20662142

This is just a random topic, at the time of posting it had 62 comments to it. All expanded, that would be quite a lot.

See however what happens when you navigate to comments as opposed to what would happen in Drupal: you only get to see the comment (not the original post, because the comment is probably a reply to the comment above, not the original post), but you also get the comment tree so you can navigate to other comments (and to the first post ofcourse).

Reply

Farrell

Comment Permissions

I've had difficulty with comment permissions and I wondered if you guys have an answer.

I've built a site, www.newsnosh.com, that is a community/directory site. It has a CCK content type for my main directory entries and member blogs, forums and voting.

I want to allow comments for anonymous users on the blogs only, and then require registration for forum comments and comments on my directory entries. Do you know of any way to do this?

Since comments aren't nodes, I can't find a workaround. Is there some provision in 5.0 for this? My site is currently on 4.7.4.

Thanks much.

Reply

jeff

Comment permissions are global

Comment permissions are global so there's (currently) no way that I know of to give different permissions to different areas.

This is a great argument for comments as nodes.

Reply

Farrell

Comments as Nodes

Yes, I think the only fix is comments as nodes.

Wasn't a Summer of Code project on something along these lines discussed on your podcast? Maybe it was just users as nodes... I can't remember.

This is a shame, as the current configuration of comments links forum responses to all other comments, and I see the two as completely different from a functional perspective.

Thanks for the response.

Reply

Linda

I've been wrestling with the lack of comment permission control

Another possible fix would be to modify comment.module to have a setting per node type rather than a single global setting. Then you could say anonymous posts for blogs and users only for forums. From a UI perspective it could be defined along with the whole current comment settings for node types.

Reply

ahoeben

Comment subject field

There's a tiny module that fills in the comment subject field in a familiar 're:' fashion. Users can still change the comment subject if they want to.
http://drupal.org/project/comment_subject

Reply

dame139

Anyone know how to build a comment system like this?

I am starting to build a Drupal website. After searching for a long time. I think the comment system in www.twit.tv is the best. Anyone know how to create it or the module to build it.
This is an example of the comment that I like
http://www.twit.tv/2006/10/25/ok_ok

Hope somebody can help me!
much appriciate!

Reply

robert

I like threaded comments

I understand the concept of threaded comments, and so do the people I talk to. I don't find myself hanging out on sites where the users are not bright enough to grok threaded comments. I think comment threading is vastly superior to a chronological display.

Reply

ragaskar

There's a fairly simple

There's a fairly simple cut-n-paste hack to make collapsed comments function in a usable manner. I haven't tested this edit fully for compatibility, in particular, I'm not sure what it does when it spans pages, but in theory I don't see any issues, unless there's someone who actually finds the single comment view useful.

1. drop the if ($cid) conditional branch from comment_render(). This is pretty much a code appendix, from what I can tell.
2. Replace that big ol' honking block of if elses with the following switch statement:

<?php

 
switch ($mode) {
         case
COMMENT_MODE_FLAT_COLLASPED:
        
$output .= $cid==$comment->cid?theme('comment_flat_expanded', $comment):theme('comment_flat_collapsed', $comment);
         break;
         case
COMMENT_MODE_FLAT_EXPANDED:
        
$output .= theme('comment_flat_collapsed', $comment);
         break;
         case
COMMENT_MODE_THREADED_COLLAPSED:
        
$output .= $cid==$comment->cid?theme('comment_thread_expanded', $comment):theme('comment_thread_collapsed', $comment);
         break;
         case
COMMENT_MODE_THREADED_EXPANDED:
        
$output .= theme('comment_thread_expanded', $comment);
         break;
        }
?>

3. Enjoy typical comment behavior instead of WTF.

The whole function now reads:

<?php


function comment_render($node, $cid = 0) {
  global
$user;

 
$output = '';

  if (
user_access('access comments')) {
   
// Pre-process variables.
   
$nid = $node->nid;
    if (empty(
$nid)) {
     
$nid = 0;
    }

   
$mode = _comment_get_display_setting('mode');
   
$order = _comment_get_display_setting('sort');
   
$comments_per_page = _comment_get_display_setting('comments_per_page');

     
// Multiple comment view
     
$query_count = 'SELECT COUNT(*) FROM {comments} WHERE nid = %d';
     
$query = 'SELECT c.cid as cid, c.pid, c.nid, c.subject, c.comment, c.format, c.timestamp, c.name, c.mail, c.homepage, u.uid, u.name AS registered_name, u.picture, u.data, c.score, c.users, c.thread, c.status FROM {comments} c INNER JOIN {users} u ON c.uid = u.uid WHERE c.nid = %d';

     
$query_args = array($nid);
      if (!
user_access('administer comments')) {
       
$query .= ' AND c.status = %d';
       
$query_count .= ' AND status = %d';
       
$query_args[] = COMMENT_PUBLISHED;
      }

      if (
$order == COMMENT_ORDER_NEWEST_FIRST) {
        if (
$mode == COMMENT_MODE_FLAT_COLLAPSED || $mode == COMMENT_MODE_FLAT_EXPANDED) {
         
$query .= ' ORDER BY c.timestamp DESC';
        }
        else {
         
$query .= ' ORDER BY c.thread DESC';
        }
      }
      else if (
$order == COMMENT_ORDER_OLDEST_FIRST) {
        if (
$mode == COMMENT_MODE_FLAT_COLLAPSED || $mode == COMMENT_MODE_FLAT_EXPANDED) {
         
$query .= ' ORDER BY c.timestamp';
        }
        else {

         
/*
          ** See comment above. Analysis learns that this doesn't cost
          ** too much. It scales much much better than having the whole
          ** comment structure.
          */

         
$query .= ' ORDER BY SUBSTRING(c.thread, 1, (LENGTH(c.thread) - 1))';
        }
      }

     
// Start a form, for use with comment control.
     
$result = pager_query($query, $comments_per_page, 0, $query_count, $query_args);
      if (
db_num_rows($result) && (variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_ABOVE || variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_ABOVE_BELOW)) {
       
$output .= drupal_get_form('comment_controls', $mode, $order, $comments_per_page);
      }

     
$divs = 0;
     
$last_depth = 0;
     
drupal_add_css(drupal_get_path('module', 'comment') .'/comment.css');
      while (
$comment = db_fetch_object($result)) {
       
$comment = drupal_unpack($comment);
       
$comment->name = $comment->uid ? $comment->registered_name : $comment->name;
       
$comment->depth = count(explode('.', $comment->thread)) - 1;

        if (
$mode == COMMENT_MODE_THREADED_COLLAPSED || $mode == COMMENT_MODE_THREADED_EXPANDED) {
          if (
$comment->depth > $last_depth) {
           
$divs++;
           
$output .= '<div class="indented">';
           
$last_depth++;
          }
          else {
            while (
$comment->depth < $last_depth) {
             
$divs--;
             
$output .= '</div>';
             
$last_depth--;
            }
          }
        }
                switch (
$mode) {
         case
COMMENT_MODE_FLAT_COLLASPED:
        
$output .= $cid==$comment->cid?theme('comment_flat_expanded', $comment):theme('comment_flat_collapsed', $comment);
         break;
         case
COMMENT_MODE_FLAT_EXPANDED:
        
$output .= theme('comment_flat_collapsed', $comment);
         break;
         case
COMMENT_MODE_THREADED_COLLAPSED:
        
$output .= $cid==$comment->cid?theme('comment_thread_expanded', $comment):theme('comment_thread_collapsed', $comment);
         break;
         case
COMMENT_MODE_THREADED_EXPANDED:
        
$output .= theme('comment_thread_expanded', $comment);
         break;
        }
       
      }
      for (
$i = 0; $i < $divs; $i++) {
       
$output .= '</div>';
      }
     
$output .= theme('pager', NULL, $comments_per_page, 0);

      if (
db_num_rows($result) && (variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_BELOW || variable_get('comment_controls', COMMENT_CONTROLS_HIDDEN) == COMMENT_CONTROLS_ABOVE_BELOW)) {
       
$output .= drupal_get_form('comment_controls', $mode, $order, $comments_per_page);
      }
    }

   
// If enabled, show new comment form.
   
if (user_access('post comments') && node_comment_mode($nid) == COMMENT_NODE_READ_WRITE && (variable_get('comment_form_location', COMMENT_FORM_SEPARATE_PAGE) == COMMENT_FORM_BELOW)) {
     
$output .= comment_form_box(array('nid' => $nid), t('Post new comment'));
    }

   
$output = theme('comment_wrapper', $output);
 
//}

 
return $output;
}
?>

Some of Drupal's biggest flaws are in modules whose functionality is so far outside user expectations that it is unusable. Thank god the code is usually pretty clear, because the output is sometimes unintelligible.

Reply

ragaskar

a little bit of a paste-o

a little bit of a paste-o there; the case for COMMENT_MODE_FLAT_EXPANDED should be:

<?php
case COMMENT_MODE_FLAT_EXPANDED:
        
$output .= theme('comment_flat_expanded', $comment);
         break;
?>

and not

<?php
case COMMENT_MODE_FLAT_EXPANDED:
        
$output .= theme('comment_flat_collapsed', $comment);
         break;
       
?>
Reply

ragaskar

looks like there's some

looks like there's some weirdness with the captcha when you fail the first try.

anyways, as i was saying, there is a typo in the code i provided above.

the correct case for COMMENT_MODE_FLAT_EXPANDED is below:

<?php
case COMMENT_MODE_FLAT_EXPANDED:
        
$output .= theme('comment_flat_expanded', $comment);
         break;
?>
Reply

Robert Hartl

Comments theming

Thank You for Your post. It was the perfect start. But then the problems began. There the core does not let me change urls, links - it is so difficult. I looked at comments in wordpress (sorry for that word here, but drupal could improve template-tags a lot here) and in the theme everything can be changed easily. I switched with one website because of this. :-/

Reply

kemono masaru

Thanks!

I'm a newbie of Drupal administration. I wonder why name/mail area is disappeared for anonymous user. I've searched serveral hours about this issue. Finally I can meet your article. It is very useful. Thanks!

Reply

Anonymous

good

good work

Reply

VB6 Admin

Thank you

Thank you for this great write up! I am putting some of the tips into use on my VB6 Tutorials page! I specifically find it useful when I have a bunch of people trying to add comments such as on this VB6 Beginner page.

I was wondering what you think about using Mollom for comment filtering? I am using it right now on one of my sites and it seems to work quite well. I know this is an old post I'm commenting on, but I'm curios as to what you think.

Reply

pachydermus

Drupal 5, Resin, Comments and IE6

Installed D5 to work in resin, and it does so beautifully. However, I am having trouble with comment form submissions leading to a 404 on ie6 only (works fine on other browsers). the http://mysite.com:8080/drupal/?q=node/10#comment-38 URL is a 404 the moment you submit the comment form, and if you then refresh, you get the page as if nothing ever went wrong. Tried changing the theme, comment settings etc. No difference. Happens every time on IE6. Any idea why?

Reply

John Hyde

Drupal comments should be like normal comments

Great post. The best way to configure your drupal comments is to make it as similar as you can to every other blog in the world.

Regular visitors to your site have 'learned' how to use blogs from other blogs.

Jakob Nielsen's Law of the Web User Experience states that "users spend most of their time on other websites."

I recently had a fierce debate with a developer about the "(not verified)" thang. He had 100s of reasons why it's a good thing. But no other blog software copies this idea - which makes it a bad thing in my book.

(Stands back)

Reply

jc

You didn't mention...

Good post, but you didn't mention anything about the comment form itself. For most users, allowing a choice of input format is overkill and/or will confuse them. It would be nice to see some info here about removing this from the form.

And although it's a very hairy topic, info about the choice of editor (if any) could also have been included here.

jc

Reply

kev

I vastly prefer threaded

I vastly prefer threaded comments, but as my forum grows, i'm faced more and more often with nodes that have more than the 300-per-page limit. Anyone have tips for dealing with threaded comments in large forums?

Kevin

Reply

Josh

related question

Thanks so much for this article. It definitely helped me figure out the best setup for my comments.

I do have a related comment if you don't mind. Where do I go to add the "The content of this field is kept private and will not be shown publicly."? I can't find anywhere where I can activate it or place it myself.

Thanks,

Josh

Reply

cross

Logged in user

Great article, helps me very much!

How to set up a homepage for register user ?

Reply