Проблема при переходе из блока "Последние комментарии" на ноду где больше одной страницы комментов, вываливается всегда на первую страницу. при чем на самый верх. Понятно что в ютом блоке не определяется номер страницы, только тупо подставляется номер коммента. Как можно вычислить на какой странице находится коммент по номеру ноды и номеру коментария?
Проблема как я понял тянется давно, но решения для 6-ой версии я так и не нашёл, если не трудно киньте в меня ссылкой.
Заранее спасибо!
Комментарии
Вычислять умеет advanced_forum
В файл темы template.tpl нужно поместить следующий код:
$items = array();
foreach (comment_get_recent() as $comment) {
$node=node_load($comment->nid);
$posts_per_page= _comment_get_display_setting('comments_per_page', $node);
$post_number=db_result(db_query("SELECT COUNT(*) FROM {comments} WHERE nid = %d AND timestamp <=%d ", $comment->nid, $comment->timestamp ));
$page=floor(($post_number-1)/$posts_per_page);
if (!$page){
$items[] = l($comment->subject, 'node/'. $comment->nid, array('fragment' => 'comment-'. $comment->cid)) .'<br />'. t('time ago', array('time' => format_interval(time() - $comment->timestamp)));
}
else {
$items[] = l($comment->subject, 'node/'. $comment->nid, array('query' => 'page='.$page.'#comment-'.$comment->cid)).'<br />'. t('time ago', array('time' => format_interval(time() - $comment->timestamp)));
}
}
if ($items) {
return theme('item_list', $items);
}
}
ЗЫ. пред использованием нужно очистить кеш
То что адвансед правильно определяет номер страницы я знаю.
romass, спасибо за код. Я уже сам написал почти блок заново, но это вариант больше подходит. Ещё раз спасибо. Только одно но, не подсвечивается новое сообщение в блоке.
По умолчанию у этого блока такой функции нет. Это нужно переопределять функцию theme_comment_view , там есть счетчик, который за это отвечает.
Как вариант , что бы не заморачиваться можно сделать так
(решение не самое лучшее, но у меня это прокатило
$items = array();
foreach (comment_get_recent() as $comment) {
$node=node_load($comment->nid);
$posts_per_page= _comment_get_display_setting('comments_per_page', $node);
$post_number=db_result(db_query("SELECT COUNT(*) FROM {comments} WHERE nid = %d AND timestamp <=%d ", $comment->nid, $comment->timestamp ));
$page=floor(($post_number-1)/$posts_per_page);
$comment_output = theme_comment_view(_comment_load($comment->cid), $node);
substr_count($comment_output, 'class="new"') ? $new='<span>'.t('new').'</span>' : $new=false;
if (!$page){
$items[] = l($comment->subject, 'node/'. $comment->nid, array('fragment' => 'comment-'. $comment->cid)) .'<br />'. t('time ago', array('time' => format_interval(time() - $comment->timestamp))).$new;
}
else {
$items[] = l($comment->subject, 'node/'. $comment->nid, array('query' => 'page='.$page.'#comment-'.$comment->cid)).'<br />'. t('time ago', array('time' => format_interval(time() - $comment->timestamp))).$new;
}
}
if ($items) {
return theme('item_list', $items);
}
}
Осталось только темизовать линки, но это вы уже сами разберетесь
У меня версия Advanced Forum 6.x-1.2 и переходы на комментарии в многостраничных темах работают не корректно. Файл template.tpl, я не нашел, только template.php, но там нет функции function phptemplate_comment_block().
Подскажите есть ли решение данной проблемы для версии Advanced Forum 6.x-1.2.