having done some more work on making Drupal Froums look nice and work more like a forum, I noticed a potential bug in the way Drupal handles pagination on comments. If you have a node with many comments and you have enabled comment pagination, you will notice:
- After posting a comment in, you are redirected back to page 1, on a multipaged forum topic this is really annoying.
- Permalinks to comments do not work because the comment_form_submit does not pass in the query (page number)
- Changing the comments per page will generate a different permalink for each comment, without creating a dedicated callback and redirecting the user to the specific post (comment/permalink/comment_ID), there doesnt seem to be a fix for this
It is easy enough to redirect the user to (node/NODE_NID?page=PAGE_ID#COMMENT_ID) after a comment gets submitted. Here is what I did:
function mymodule_form_alter($form_id, &$form) { if ($form_id == 'forum_node_form' && $form_id == 'comment_form'){ $form['#redirect'] = mymodule_comment_redirect($form['nid']['#value']); } } function mymodule_comment_redirect($nid){ global $user; $uid = $user->uid; //get the last comment ID $sql = "SELECT cid FROM {comments} WHERE nid = %d AND uid = %d ORDER BY timestamp DESC LIMIT 1"; $cid = db_result(db_query($sql, $nid, $uid)); //work out totals etc $sql2 = "SELECT count(cid) as total FROM {comments} WHERE nid = %d"; $comment_total = db_result(db_query($sql2, $nid)); $comment_default_per_page = variable_get('comment_default_per_page', 10); $last_page = floor($comment_total/$comment_default_per_page); //return the redirect url with fragment pager id return array('node/'. $nid, "page=".$last_page, "comment-$cid"); }