Публикации

Пользователь:

Пароль:


Запомнить

Регистрация
Забыли пароль?



Пользователей: 3915
Новичок: Александрович
Поддержи проект
Поддержите проект Webmoney
R197422573540
E197270426287
Z701768662172
Сказали «Спасибо»

Навигация

Разбиваем комментарии на страницы


Автор: Kapman
 9.5 - 8 голосов -

Разбиваем комментарии на страницы - Хак

Сегодня статья будет посвящена улучшению комментариев на сайте. Как Вы уже наверно заметили, сама e107 выводит сразу все оставленные комментарии, что при большом их кол-ве не только неудобно, но и увеличивает время генерации страницы. Это мы и будем исправлять.

И так приступим…

Все классы и функции, отвечающие за вывод комментариев, находятся в файле comment_class.php из папки e107_handlers. Открываем его в любом удобном для Вас текстовом редакторе (желательно с подсветкой PHP синтаксиса и нумерацией строк). Находим следующий текст (476 строка в 0.7.24):
+ Показать

Сразу после добавляем:
+ Показать


Данный код инициализирует необходимые нам в дальнейшем переменные. Обратите внимание на 3 строку, в ней указано кол-во выводимых на странице комментариев, у нас их 20.

Чуть ниже идут запросы к базе данных MySQL (SELECT c.*, u.*, ue.* FROM #comments AS …. ORDER BY c.comment_datestamp), в конце них дописываем:
– Цитата: 
  1. LIMIT ".$np_pos.",".$np_amount.""

чтобы получилось так:
+ Показать


Основную задачу мы решили, осталось только добавить навигацию по страницам. Для этого в e107 имеется шорткод NEXTPREV. Ему всего лишь нужно передать следующие параметры через запятую: общее кол-во комментариев, кол-во на страницу, текущую страницу и указать, где будет находиться номер страницы в адресе. Всё остальное он сделает за нас.

Находим строки (518-522 в 0.7.24):
– Цитата: 
  1. $text = "";
  2. $comment = '';
  3. $modcomment = '';
  4. $lock = '';
  5. $ret['comment'] = '';

После добавляем:
– Цитата: 
  1. // Разбиваем комментарии на страницы
  2. //---------------------------- ------------------------------ --
  3. $parms = $np_total.",".$np_amount.",".$np_pos.",".e_SELF.'?'.$np_query.".[FROM]";
  4. $nextprev = $tp->parseTemplate("{NEXTPREV={$parms}}");
  5. $text .= ($nextprev ? '<div class="nextprev">'.$nextprev.'</div>' : '');
  6. //---------------------------- ------------------------------ -


Вот, в принципе, и всё, но, если Вы откроете, к примеру, новость с комментариями разбитыми на несколько страниц, то увидите, что новые комментарии находятся на последних страницах. Это легко исправляется - идём обратно к MySQL запросам и между ORDER BY c.comment_datestamp и LIMIT добавляем DESC.

Что получилось в итоге:
+ Показать


Хак работает в новостях, загрузках и на своих страницах (page.php).

Если Вы используете древовидный вывод комментариев, то необходимо дополнительно изменить функцию count_comments:
  1. function count_comments($table, $id)
  2. {
  3.         global $sql, $tp, $pref;
  4.         $type = $this -> getCommentType($table);
  5.         $count_comments = $sql -> db_Count("comments", "(*)", "WHERE comment_item_id='".intval($id)."'".($pref['nested_comments']?" AND comment_pid='0'":'').
  6. " AND comment_type='".$tp -> toDB($type, true)."' ");
  7.         return $count_comments;
  8. }
  9.  


Автор статьи: Kapman

PS: Спасибо net1313 за помощь