Да именно так бы я и сделал, учитывая структуру базы данныхНо за каждый вопрос голосуют десятки юзеров. И их через запятую в одно поле?
Организовать проверку на проголосованность юзера.
- Предыдущая
- 1
- 2
- Показаны 16-20 из 20
в комментариях, в первой ветке, проголосовавшие юзеры запоминаются в таблице cms_comment_votes
#17
6 февраля 2015 в 22:36
да, именно. Для этого нужно использовать implode/explodeНо за каждый вопрос голосуют десятки юзеров. И их через запятую в одно поле?
#18
6 февраля 2015 в 23:07
Rossoman,
Спасибо за совет, но боюсь при моем знании пехапе я пока не готов к реализации данного метода.
Пока попробую изучить, что написали умные люди в файле components/comments/model.php
Попробую сделать по аналогии.
По крайней мере в таблице cms_comments в столбце "рейтинг" ничего через запятую нет, А однажды оценивший комментарий пользователь повторно голосовалки не видит.
Спасибо за совет, но боюсь при моем знании пехапе я пока не готов к реализации данного метода.
Пока попробую изучить, что написали умные люди в файле components/comments/model.php
public function getComments($only_published=true, $is_tree=false, $from_module = false) { $inUser = cmsUser::getInstance(); global $_LANG; $published = $only_published ? 'c.published = 1' : '1=1'; $sql = "SELECT c.*, IFNULL(u.nickname, 0) as nickname, IFNULL(u.login, 0) as login, IFNULL(u.is_deleted, 0) as is_deleted, IFNULL(p.imageurl, 0) as imageurl, IFNULL(p.gender, 0) as gender FROM cms_comments c LEFT JOIN cms_users u ON u.id = c.user_id LEFT JOIN cms_user_profiles p ON p.user_id = u.id WHERE {$published} {$this->inDB->where} {$this->inDB->group_by} {$this->inDB->order_by}\n"; if ($this->inDB->limit){ $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); while($comment = $this->inDB->fetch_assoc($result)){ $comment['level'] = 0; $comment['is_editable'] = $this->isEditable($comment['pubdate']); $comment['fpubdate'] = cmsCore::dateFormat($comment['pubdate'], true, true); if ($comment['guestname']){ $comment['author'] = $comment['guestname']; $comment['is_profile'] = false; } else { $comment['author']['nickname'] = $comment['nickname']; $comment['author']['login'] = $comment['login']; $comment['is_profile'] = true; $comment['user_image'] = cmsUser::getUserAvatarUrl($comment['user_id'], 'small', $comment['imageurl'], $comment['is_deleted']); $comment['ip'] = ($this->config['cmm_ip'] == 2 && $comment['ip']) ? $comment['ip'] : ''; } switch ($comment['gender']){ case 'm': $comment['gender'] = $_LANG['COMMENTS_MALE']; break; case 'f': $comment['gender'] = $_LANG['COMMENTS_FEMALE']; break; default: $comment['gender'] = $_LANG['COMMENTS_GENDER']; } $comment['show'] = (!$this->config['min_karma'] || $comment['rating'] >= $this->config['min_karma_show']) || cmsUser::userIsAdmin($comment['user_id']); $comment['is_my'] = ($inUser->id == $comment['user_id']); if ($inUser->id){ $comment['is_voted'] = $comment['is_my'] ? true : cmsUser::isRateUser('comment', $inUser->id, $comment['id']); } else { $comment['is_voted'] = true; } $comments[] = $comment; } if($is_tree){ $comments = $this->buildTree(0, 0, $comments); } return $from_module ? cmsCore::callEvent('GET_COMMENTS_MODULE', $comments) : cmsCore::callEvent('GET_COMMENTS', $comments); }
По крайней мере в таблице cms_comments в столбце "рейтинг" ничего через запятую нет, А однажды оценивший комментарий пользователь повторно голосовалки не видит.
Сегодня в 08:24
Rossoman,
Спасибо за совет, но боюсь при моем знании пехапе я пока не готов к реализации данного метода.
Пока попробую изучить, что написали умные люди в файле components/comments/model.php
Попробую сделать по аналогии.
public function getComments($only_published=true, $is_tree=false, $from_module = false) { $inUser = cmsUser::getInstance(); global $_LANG; $published = $only_published ? 'c.published = 1' : '1=1'; $sql = "SELECT c.*, IFNULL(u.nickname, 0) as nickname, IFNULL(u.login, 0) as login, IFNULL(u.is_deleted, 0) as is_deleted, IFNULL(p.imageurl, 0) as imageurl, IFNULL(p.gender, 0) as gender FROM cms_comments c LEFT JOIN cms_users u ON u.id = c.user_id LEFT JOIN cms_user_profiles p ON p.user_id = u.id WHERE {$published} {$this->inDB->where} {$this->inDB->group_by} {$this->inDB->order_by}\n"; if ($this->inDB->limit){ $sql .= "LIMIT {$this->inDB->limit}"; } $result = $this->inDB->query($sql); $this->inDB->resetConditions(); while($comment = $this->inDB->fetch_assoc($result)){ $comment['level'] = 0; $comment['is_editable'] = $this->isEditable($comment['pubdate']); $comment['fpubdate'] = cmsCore::dateFormat($comment['pubdate'], true, true); if ($comment['guestname']){ $comment['author'] = $comment['guestname']; $comment['is_profile'] = false; } else { $comment['author']['nickname'] = $comment['nickname']; $comment['author']['login'] = $comment['login']; $comment['is_profile'] = true; $comment['user_image'] = cmsUser::getUserAvatarUrl($comment['user_id'], 'small', $comment['imageurl'], $comment['is_deleted']); $comment['ip'] = ($this->config['cmm_ip'] == 2 && $comment['ip']) ? $comment['ip'] : ''; } switch ($comment['gender']){ case 'm': $comment['gender'] = $_LANG['COMMENTS_MALE']; break; case 'f': $comment['gender'] = $_LANG['COMMENTS_FEMALE']; break; default: $comment['gender'] = $_LANG['COMMENTS_GENDER']; } $comment['show'] = (!$this->config['min_karma'] || $comment['rating'] >= $this->config['min_karma_show']) || cmsUser::userIsAdmin($comment['user_id']); $comment['is_my'] = ($inUser->id == $comment['user_id']); if ($inUser->id){ $comment['is_voted'] = $comment['is_my'] ? true : cmsUser::isRateUser('comment', $inUser->id, $comment['id']); } else { $comment['is_voted'] = true; } $comments[] = $comment; } if($is_tree){ $comments = $this->buildTree(0, 0, $comments); } return $from_module ? cmsCore::callEvent('GET_COMMENTS_MODULE', $comments) : cmsCore::callEvent('GET_COMMENTS', $comments); }
По крайней мере в таблице cms_comments в столбце "рейтинг" ничего через запятую нет, А однажды оценивший комментарий пользователь повторно голосовалки не видит.
В данной функции получаются все комментарии
#20
6 февраля 2015 в 23:23
Rossoman,
Меня интересует, как оно определяет is_voted?
И почему у меня не получается переделать данную процедуру просто скопировав функцию в модель моего компонента и переименовав все слова "comment" в "faq".
Меня интересует, как оно определяет is_voted?
И почему у меня не получается переделать данную процедуру просто скопировав функцию в модель моего компонента и переименовав все слова "comment" в "faq".
- Предыдущая
- 1
- 2
- Показаны 16-20 из 20