Как сделать фокус на последний комментарий?

Как сделать фокус на последний комментарий, а не на первую страницу темы комментариев? При добавлении комментария страница перескакивает на первую страницу
темы, тоже самое, когда смотришь новые комментарии - всегда первая
страница. Как сделать, чтобы попадать на последнюю страницу или на
актуальный комментарий?

У Drupal есть многолетняя проблема, которую разработчики по каким-то причинам не хотят решать: в случае, если комментарии занимают несколько страниц, неправильно формируются ссылки к новым комментариям в трекере и при переход по такой ссылке открывается первая страница комментариев, хотя пользователь ожидает открытия новых. Здесь описывается применение патча, который разрешает эту проблему.

К сожалению, без правки модулей не обойтись, но вроде и не ядро :)
Затрагиваемые файлы

modules/comments/comment.module
modules/forum/forum.module
modules/tracker/tracker.module
Поехали

1) Открываем файл modules/comments/comment.module, переходим к строке 315,

заменяем код

<?php
'href' => "node/$node->nid",
?>

на следующий:

<?php
'href' => "node/$node->nid",
'query' => comment_new_page_count($all, $new, $node->nid),
?>

1а) Переходим в конец файла, ниже всего существующего кода вставляем описание новой функции:

<?php
/**
* New function to calculate page number for first new comment.
*/

function comment_new_page_count($num_comments, $new_replies, $nid) {
$comments_per_page = _comment_get_display_setting('comments_per_page');
$mode = _comment_get_display_setting('mode');
$order = _comment_get_display_setting('sort');
$pagenum = NULL;
if ($num_comments <= $comments_per_page || ($mode<3 && $order == 1)) {
//Only one page of comments or flat forum and newest first.
//First new comment will always be on first page
$pageno = 0;
}
else {
if ($mode < 3){
//Flat comments and oldest first
$count = $num_comments - $new_replies;
}
else {
//Threaded comments. See the documentation for comment_render().
if ($order == 1) {
//Newest first: find the last thread with new comment
$result = db_query('(SELECT thread FROM {comments} WHERE nid = %d  AND status = 0 ORDER BY timestamp DESC LIMIT %d) ORDER BY thread DESC LIMIT 1', $nid, $new_replies);
$thread = db_result($result);
$result_count = db_query("SELECT COUNT(*) FROM {comments} WHERE nid = %d AND status = 0 AND thread > '" . $thread . "'", $nid);
}
else {
//Oldest first: find the first thread with new comment
$result = db_query('(SELECT thread FROM {comments} WHERE nid = %d  AND status = 0 ORDER BY timestamp DESC LIMIT %d) ORDER BY SUBSTRING(thread, 1, (LENGTH(thread) - 1)) LIMIT 1', $nid, $new_replies); 
$thread = substr(db_result($result), 0, -1);
$result_count = db_query("SELECT COUNT(*) FROM {comments} WHERE nid = %d AND status = 0 AND SUBSTRING(thread, 1, (LENGTH(thread) - 1)) < '" . $thread . "'", $nid);
}
$count = db_result($result_count);
}
$pageno =  $count / $comments_per_page;
}
if ($pageno >= 1) {
$pagenum = "page=" . intval($pageno);
}
return $pagenum;
}
?>

2) Открываем файл modules/forum/forum.module, переходим к строке 1001,

заменяем строку

<?php
array('data' => $topic->num_comments . ($topic->new_replies ? '<br />'. l(format_plural($topic->new_replies, '1 new', '@count new'), "node/$topic->nid", NULL, NULL, 'new') : ''), 'class' => 'replies'),
?>

на строку

<?php
array('data' => $topic->num_comments . ($topic->new_replies ? '<br />'. l(format_plural($topic->new_replies, '1 new', '@count new'), "node/$topic->nid", NULL, comment_new_page_count($topic->num_comments, $topic->new_replies, $topic->nid), 'new') : ''), 'class' => 'replies'),
?>

3) Открываем файл modules/tracker/tracker.module, переходим к строке 104,

меняем код

<?php
$comments .= l(format_plural($new, '1 new', '@count new'), "node/$node->nid", NULL, NULL, 'new');
?>

на следующий:

<?php
$comments .= l(format_plural($new, '1 new', '@count new'), "node/$node->nid", NULL, comment_new_page_count($node->comment_count, $new, $node->nid), 'new');
?>

4) Сохраняем изменения во всех файлах, не забыв сделать это в кодировке UTF8, заливаем на хост, сбрасываем кеш, любуемся результатом.
Источник:

http://drupal.org/files/issues/threaded.patch.txt

Примечание: строки "<?php" и "?>" копировать не надо.