Pager at top and bottom of comments

Originally posted as http://drupal.org/node/79352#comment-223909

This snippet places a pager at the top of the comments on a node, in addition to the default pager at the bottom. It is especially useful in forums. For an example theme called 'mytemplate,' add the following to template.php:

<?php
/**
* Add a pager at the top of a list of comments.
*/
function mytemplate_comment_wrapper($content) {
 
$comments_per_page = _comment_get_display_setting('comments_per_page');
 
$content = theme('pager', NULL, $comments_per_page, 0) . $content;
  return
theme_comment_wrapper($content);
}
?>

Details

The function comment_render() in comment.module calls theme('comment_wrapper', $output). This theming call will match any hook *_comment_wrapper(), or give up and fall back to theme_comment_wrapper() (which is also in comment.module). This is a great place to jump in and add an extra pager, because the default function only wraps the comments in a <div>.

Line-by-line, the above snippet does the following:

  1. Retrieve the number of comments per page, which is needed for the pager. This line is copied directly from near the top of comment_render().
  2. Prepend a pager to the content (which has already been given a pager at the end). This line is also found in comment.module and allows other theming applied to the pager to function properly.
  3. Use the default theming function from comment.module to wrap the whole set of pager + comments + pager in a <div>.

Sorry but I have some

cpract - August 9, 2007 - 10:33

Sorry but I have some difficulty to get this working. I have added the code sniplet in the template.php. Now do I have to call this from my node-forum.tpl.php too?

Got it. For other novices,

cpract - August 9, 2007 - 11:09

Got it. For other novices, put following in your tpl.php file of chocie to get this working:

<?php mytemplate_comment_wrapper(NULL, $node->type); ?>

 
 

Drupal is a registered trademark of Dries Buytaert.