Ошибка в истории комментариев

Помогите пожалуйста разобраться с ошибкой в истории комментариев.

#1 12 июня 2015 в 22:47
Добавил данное решение
instantcms.ru/blogs/u-ch-rta-za-pazuhoi/istorija-komentariev-na-ajaks.html#comment_82018
на instant 1.10.4
При тестировании заметил следующую ошибку, (ставил на уже работающий инстант).
При голосовании заметил что когда добавляю голос, то там уже задним числом выдает еще кого-то, хотя комментарий добавлен только сегодня был.
Итого:
1.Статья добавлена сегодня.
2.Комментарий добавлен сегодня.
3.В статистике пишется +1 к комментарию
4.Открываешь посмотреть историю там еще показывает как будто бы кто-то голосовал, год назад, хотя такого быть не могло.
5.Проблема не с единичным комментарием, так происходит раз через два, часто.
Вот скрин:
Иллюстрация
Помогите пожалуйста разобраться в чем может быть проблема.
Заранее спасибо.
PS там еще из темы вот этой следует, что необходимо в файл /components/comments/model.php добавить следующий код
  1.  
  2. function r_User($id){
  3.  
  4. $sql ="SELECT u.nickname
  5. FROM cms_users u
  6. LEFT JOIN cms_comments c ON c.user_id = u.id
  7. LEFT JOIN cms_ratings r ON r.item_id = c.id
  8. WHERE u.id = $id LIMIT 1";
  9.  
  10. $result = $this->inDB->query($sql);
  11.  
  12. if (!$this->inDB->num_rows($result)) { return false; }
  13. $commen = $this->inDB->fetch_assoc($result);
  14.  
  15. return $commen;
  16. }
  17. /*******************************************************************/
  18. function l_User($id){
  19.  
  20. $sql ="SELECT u.login
  21. FROM cms_users u
  22. LEFT JOIN cms_comments c ON c.user_id = u.id
  23. LEFT JOIN cms_ratings r ON r.item_id = c.id
  24. WHERE u.id = $id LIMIT 1";
  25.  
  26. $result = $this->inDB->query($sql);
  27.  
  28. if (!$this->inDB->num_rows($result)) { return false; }
  29. $commen = $this->inDB->fetch_assoc($result);
  30.  
  31. return $commen;
  32. }
  33. /*****************************************************************/
  34.  
  35. public function getRComment($id) {
  36.  
  37.  
  38. $sql = "SELECT c.*,
  39. u.nickname as nickname,
  40. u.login as login,
  41. r.user_id as ruser,r.points as points,r.pubdate as date
  42. FROM cms_comments c
  43. LEFT JOIN cms_ratings r ON r.item_id = c.id
  44. LEFT JOIN cms_users u ON u.id = c.user_id
  45. LEFT JOIN cms_user_profiles p ON p.user_id = u.id
  46. WHERE c.id = r.item_id AND c.target_id=$id";
  47.  
  48.  
  49. $result = $this->inDB->query($sql);
  50.  
  51. if (!$this->inDB->num_rows($result)) { return false; }
  52.  
  53. while($comment = $this->inDB->fetch_assoc($result)){
  54.  
  55. $comment['rnick'] = implode($this->r_User($comment['ruser']));
  56. $comment['rlogin'] = implode($this->l_User($comment['ruser']));
  57.  
  58. $comments[] = $comment;
  59.  
  60. }
  61. return $comments;
  62.  
  63. }
  64.  
  65.  
А после функцию public function getRComment($id) заменить на:

  1. public function getRating($id,$target_id) {
  2.  
  3.  
  4. $sql = "SELECT r.*,
  5. u.nickname as nickname,
  6. u.login as login,c.id as cid
  7.  
  8. FROM cms_ratings r
  9. LEFT JOIN cms_comments c ON c.target_id=$target_id AND r.item_id=c.id
  10. LEFT JOIN cms_users u ON u.id = r.user_id
  11. LEFT JOIN cms_user_profiles p ON p.user_id = u.id
  12. WHERE item_id=$id ";
  13.  
  14.  
  15. $result = $this->inDB->query($sql);
  16.  
  17. if (!$this->inDB->num_rows($result)) { return false; }
  18.  
  19. while($rating = $this->inDB->fetch_assoc($result)){
  20.  
  21. $rating ['rnick'] = implode($this->r_User($rating ['user_id']));
  22. $rating ['rlogin'] = implode($this->l_User($rating ['user_id']));
  23.  
  24. $ratings[] = $rating ;
  25.  
  26. }
  27. return $ratings;
  28.  
  29. }
#2 13 июня 2015 в 15:06
Я ставил это дополнение и у меня была такая проблема.
Дело в том, что отслеживается голосование за target_id
Если в таблице cms_ratings есть голоса за разный контент, но с одинаковым id — они все будут выведены в списке проголосовавших.

Надо доработать выборку из базы следующим образом:

  1. $sql = "SELECT r.*,
  2. u.nickname as nickname,
  3. u.login as login,c.id as cid
  4.  
  5. FROM cms_ratings r
  6. LEFT JOIN cms_users c ON item_id=$target_id AND r.item_id=c.id
  7. LEFT JOIN cms_users u ON u.id = r.user_id
  8.  
  9. WHERE target = 'comment' AND item_id=$id LIMIT 20";
#3 13 июня 2015 в 16:28
HiAndy, Спасибо огромное помогло. Все начало корректно работать. +1 в карму.
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.