Рейтинг гостям

ЕСТЬ РЕШЕНИЕ ЗАКРЫТО
#1 7 июня 2015 в 18:20
Облазил весь форум, но не нашел ответа. Поэтому создаю тему. Как можно сделать, что бы кнопки рейтинга новости или другого контента стали активными для гостей. Просто мало кто зарегистрируется, что бы проголосовать за материал, вернее ни кто. А также разрешить оценку комментариев гостями.
#2 18 июня 2015 в 00:14
Апаю тему, программисты подскажите?!
#3 18 июня 2015 в 00:48
Ingvarruss,
Отмените проверку на зарегистрированность перед голосованием.
О какой ветке Инстанта идет речь?
#4 18 июня 2015 в 00:49
О двойке речь идет
#5 18 июня 2015 в 00:57
Ingvarruss, а как вы планируете защищаться от накруток рейтинга? 😉
#6 18 июня 2015 в 00:59
Об этом не подумал, но в комментариях сделали то ограничение по IP, может и здесь так возможно?
#7 18 июня 2015 в 01:00
Val,
Если речь пошла о голосовании гостями, то о защите от накруток речи уже быть не может.

Регистрировать айпи голосовавшего и не давать голосовать дважды с одного айпи?
#8 18 июня 2015 в 01:06

Если речь пошла о голосовании гостями, то о защите от накруток речи уже быть не может.

HiAndy
об этом и речь! теряется смысл рейтинга...

Регистрировать айпи голосовавшего и не давать голосовать дважды с одного айпи?

HiAndy
не самый лучший вариант, т.к. зарегистрированные в системе IP'шник может попасть пользователю который еще не голосовал
В любом случае нужно не слабо допиливать систему хаками, чтобы что-то рабочее сделать.
#9 18 июня 2015 в 01:30
Val,
Судя по всему, Ingvarruss готов на любые накрутки, лишь бы хоть кто-то голосовал. scratch

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

Что бы сделал я в такой ситуации:
1. Максимально упростил бы регистрацию. Только имейл и пароль. Отключил бы капчу и подтверждение мыла.
2. Отобрал бы у новичков все права, кроме голосования.
3. Перевод новичков в пользователи только после подтверждения мыла и нормального заполнения профиля.
#10 18 июня 2015 в 10:05

Судя по всему, Ingvarruss готов на любые накрутки, лишь бы хоть кто-то голосовал.

HiAndy
Да кто накручивать будет новость, человек зашел, прочел, оставил мнение, это же не конкурс какой.

Не видел ни одного сайта на инстанте, где можно голосовать гостям. Возможно плохо искал.

HiAndy
Тоже не встречал.
Почему задал этот вопрос, потому что люди становятся все более ленивые и никто не будет регистрироваться, что бы оценить новость или статью.
#11 18 июня 2015 в 22:52
Ну раз никаких моральных препятствий нет, тогда можно сделать так:

Дорабатываем \templates\default\controllers\rating\widget.tpl.php

  1. <?php $is_first_widget = $this->addJS('templates/default/js/rating.js'); ?>
  2.  
  3. <div class="rating_widget" id="rating-<?php echo $target_subject; ?>-<?php echo $target_id; ?>"
  4. <?php if ($is_enabled || $options['is_show']){ ?>
  5. data-target-controller="<?php echo $target_controller; ?>"
  6. data-target-subject="<?php echo $target_subject; ?>"
  7. data-target-id="<?php echo $target_id; ?>"
  8. <?php if ($options['is_show']){ ?>
  9. data-info-url="<?php echo $this->href_to('info'); ?>"
  10. <?php } ?>
  11. <?php } ?>
  12. >
  13.  
  14. <div class="arrow up">
  15. <?php if (1==1){ ?>
  16. <a href="#vote-up" class="vote-up" title="<?php echo LANG_RATING_VOTE_UP; ?>"></a>
  17. <?php } else { ?>
  18. <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>"></span>
  19. <?php } ?>
  20. </div>
  21.  
  22. <div class="score" title="<?php echo LANG_RATING; ?>">
  23. <?php if ($options['is_hidden'] && !$is_voted && ($is_enabled || $is_guest)){ ?>
  24. <span>&mdash;</span>
  25. <?php } else { ?>
  26. <span class="<?php echo html_signed_class($current_rating); ?><?php if ($options['is_show']) { ?> clickable<?php } ?>">
  27. <?php echo html_signed_num($current_rating); ?>
  28. </span>
  29. <?php } ?>
  30. </div>
  31.  
  32. <div class="arrow down <?php if (!$is_enabled){ ?>disabled<?php } ?>">
  33. <?php if (1==1){ ?>
  34. <a href="#vote-down" class="vote-down" title="<?php echo LANG_RATING_VOTE_DOWN; ?>"></a>
  35. <?php } else { ?>
  36. <span class="disabled" title="<?php html( $is_voted ? LANG_RATING_VOTED : LANG_RATING_DISABLED ); ?>"></span>
  37. <?php } ?>
  38. </div>
  39.  
  40. </div>
  41.  
  42. <?php if ($is_first_widget) { ?>
  43. <script>
  44. icms.rating.setOptions({
  45. url: '<?php echo $this->href_to('vote'); ?>'
  46. });
  47. </script>
  48. <?php }?>
Потом дорабатываем \system\controllers\rating\model.php

  1. <?php
  2.  
  3. class modelRating extends cmsModel{
  4.  
  5. //============================================================================//
  6. //============================================================================//
  7.  
  8. public function isUserVoted($vote){
  9.  
  10.  
  11.  
  12.  
  13. return $votes_count > 0 ? true : false;
  14.  
  15. }
  16.  
  17. //============================================================================//
  18. //============================================================================//
  19.  
  20. public function filterVotes($controller, $subject, $id){
  21.  
  22. $this->filterEqual('target_controller', $controller);
  23. $this->filterEqual('target_subject', $subject);
  24. $this->filterEqual('target_id', $id);
  25.  
  26. return $this;
  27.  
  28. }
  29.  
  30. public function getVotesCount(){
  31.  
  32. return $this->getCount('rating_log');
  33.  
  34. }
  35.  
  36. public function getVotes(){
  37.  
  38. $this->useCache("rating.votes");
  39.  
  40. $this->joinUser();
  41.  
  42. return $this->get('rating_log', function($item, $model){
  43.  
  44. $item['user'] = array(
  45. 'id' => $item['user_id'],
  46. 'nickname' => $item['user_nickname'],
  47. 'avatar' => $item['user_avatar']
  48. );
  49.  
  50. return $item;
  51.  
  52. });
  53.  
  54. }
  55.  
  56. //============================================================================//
  57. //============================================================================//
  58.  
  59. public function addVote($vote){
  60.  
  61. cmsCache::getInstance()->clean("rating.votes");
  62.  
  63. return $this->insert('rating_log', $vote);
  64.  
  65. }
  66.  
  67. //============================================================================//
  68. //============================================================================//
  69.  
  70. public function deleteVotes($controller, $subject, $id){
  71.  
  72. $this->filterVotes($controller, $subject, $id);
  73.  
  74. $this->deleteFiltered('rating_log');
  75.  
  76. cmsCache::getInstance()->clean("rating.votes");
  77.  
  78. }
  79.  
  80. public function deleteUserVotes($user_id){
  81.  
  82. cmsCache::getInstance()->clean("rating.votes");
  83.  
  84. return $this->delete('rating_log', $user_id, 'user_id');
  85.  
  86. }
  87.  
  88. //============================================================================//
  89. //============================================================================//
  90.  
  91. }
Всё, голосуйте на здоровье! smile
#12 20 июня 2015 в 18:42
Спасибо. Тему закрываю.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.