Последние комментарии на сайте

Главные вкладки

Аватар пользователя ShurikGrOb ShurikGrOb 4 декабря 2008 в 16:41

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

Комментарии

Аватар пользователя romass romass 5 декабря 2008 в 12:18

В файл темы template.tpl нужно поместить следующий код:

function phptemplate_comment_block() {
  $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);
  }
}

ЗЫ. пред использованием нужно очистить кеш

Аватар пользователя ShurikGrOb ShurikGrOb 5 декабря 2008 в 12:33

То что адвансед правильно определяет номер страницы я знаю.
romass, спасибо за код. Я уже сам написал почти блок заново, но это вариант больше подходит. Ещё раз спасибо. Только одно но, не подсвечивается новое сообщение в блоке.

Аватар пользователя romass romass 5 декабря 2008 в 16:33

По умолчанию у этого блока такой функции нет. Это нужно переопределять функцию theme_comment_view , там есть счетчик, который за это отвечает.

Как вариант , что бы не заморачиваться можно сделать так
(решение не самое лучшее, но у меня это прокатило Smile

function phptemplate_comment_block() {
  $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);
  }
}

Осталось только темизовать линки, но это вы уже сами разберетесь

Аватар пользователя babuta babuta 10 апреля 2011 в 1:23

У меня версия Advanced Forum 6.x-1.2 и переходы на комментарии в многостраничных темах работают не корректно. Файл template.tpl, я не нашел, только template.php, но там нет функции function phptemplate_comment_block().
Подскажите есть ли решение данной проблемы для версии Advanced Forum 6.x-1.2.