Доступ к голосованию в статьях сайта, блогах, фотоальбомах, в зависимости от рейтинга пользователя.

+21
3.12K
Если Вы хотите ограничить доступ к голосованиям в зависимости от рейтинга пользователя на сайте, т.е. пользователи с нулевым рейтингом, не смогут голосовать за статьи на сайте, за фото в фотоальбомах и участвовать в голосовании в блогах. А так же при одном уровне рейтинга, пользователи могли бы только плюсовать, а при другом уровне уже могли бы плюсовать и ставить минусы.

И так находим файл:
/core/lib_karma.php
Разграничим голосования в блогах:
Находим код:
  1. function cmsKarmaForm($target, $target_id, $points = 0, $is_author = false){
  2.  
  3. $inUser = cmsUser::getInstance();
  4. $inPage = cmsPage::getInstance();
  5. $html = '';
  6.  
  7. global $_LANG;
  8.  
  9. if (!$points) {
  10. $postkarma = cmsKarma($target, $target_id);
  11. $points = cmsKarmaFormat($postkarma['points']);
  12. } else {
  13. $points = $points;
  14. }
  15.  
  16. $control = '';
  17.  
  18. //PREPARE RATING FORM
  19. if ($inUser->id && !$is_author){
  20. if(!cmsAlreadyKarmed($target, $target_id, $inUser->id)){
  21. $inPage->addHeadJS('core/js/karma.js');
  22. $control .= '<div style="text-align:center;margin-top:10px;">';
  23. $control .= '<a href="javascript:void(0);" onclick="plusKarma(\''.$target.'\', \''.$target_id.'\')" title="'.$_LANG['LIKE'].'"><img src="/components/users/images/karma_up.png" alt="Карма+"/></a> ';
  24. $control .= '<a href="javascript:void(0);" onclick="minusKarma(\''.$target.'\', \''.$target_id.'\')" title="'.$_LANG['UNLIKE'].'"><img src="/components/users/images/karma_down.png" alt="Карма-"/></a>';
  25. $control .= '</div>';
  26. }
  27. }
  28. $html .= '<div class="karma_form">';
  29. $html .= '<div id="karmapoints" style="font-size:24px">'.$points.'</div>';
  30. $html .= '<div id="karmavotes">Голосов: '.$postkarma['votes'].'</div>';
  31. $html .= '<div id="karmactrl">'.$control.'</div>';
  32. $html .= '</div>';
  33. return $html;
  34. }
  35.  
Заменяем на:
  1. function cmsKarmaForm($target, $target_id, $points = 0, $is_author = false){
  2.  
  3. $inUser = cmsUser::getInstance();
  4. $inPage = cmsPage::getInstance();
  5. $html = '';
  6.  
  7. global $_LANG;
  8. $raiting=$inUser->rating;
  9. if (!$points) {
  10. $postkarma = cmsKarma($target, $target_id);
  11. $points = cmsKarmaFormat($postkarma['points']);
  12. } else {
  13. $points = $points;
  14. }
  15.  
  16. $control = '';
  17.  
  18. //PREPARE RATING FORM
  19. if ($inUser->id && !$is_author){
  20. if(!cmsAlreadyKarmed($target, $target_id, $inUser->id)){
  21. $inPage->addHeadJS('core/js/karma.js');
  22. $control .= '<div style="text-align:center;margin-top:10px;">';
  23. if (($raiting >= 50) || ($inUser->is_admin)) {
  24. $control .= '<a href="javascript:void(0);" onclick="plusKarma(\''.$target.'\', \''.$target_id.'\')" title="'.$_LANG['LIKE'].'"><img src="/components/users/images/karma_up.png" alt="Карма+"/></a> ';
  25. } if (($raiting >= 100) ||($inUser->is_admin)) {
  26. $control .= '<a href="javascript:void(0);" onclick="minusKarma(\''.$target.'\', \''.$target_id.'\')" title="'.$_LANG['UNLIKE'].'"><img src="/components/users/images/karma_down.png" alt="Карма-"/></a>';
  27. }
  28. $control .= '</div>';
  29. }
  30. }
  31. $html .= '<div class="karma_form">';
  32. $html .= '<div id="karmapoints" style="font-size:24px">'.$points.'</div>';
  33. $html .= '<div id="karmavotes">Голосов: '.$postkarma['votes'].'</div>';
  34. $html .= '<div id="karmactrl">'.$control.'</div>';
  35. $html .= '</div>';
  36. return $html;
  37. }
  38.  
Теперь находим в нашем измененном коде:
if (($raiting >= 50) || ($inUser->is_admin)) и цифру 50 заменяем на тот уровень рейтинга, при котором пользователь сможет только плюсовать, но не сможет минусовать.
Далее находим if (($raiting >= 100) ||($inUser->is_admin)) и меняем 100 на уровень рейтинга при котором пользователь сможет минусовать.

Разграничим голосования за фото:
Находим код:
  1. function cmsKarmaButtons($target, $target_id, $points = 0, $is_author = false){
  2.  
  3. $inUser = cmsUser::getInstance();
  4. $inPage = cmsPage::getInstance();
  5. $html = '';
  6. $control = '';
  7. global $_LANG;
  8.  
  9. if (!$points) {
  10. $postkarma = cmsKarma($target, $target_id);
  11. $points = cmsKarmaFormat($postkarma['points']);
  12. } else {
  13. $points = $points;
  14. }
  15.  
  16. //PREPARE RATING FORM
  17. if ($inUser->id && !$is_author){
  18. if(!cmsAlreadyKarmed($target, $target_id, $inUser->id)){
  19. $inPage->addHeadJS('core/js/karma.js');
  20.  
  21. $control .= '<div style="text-align:center">';
  22. $control .= '<a href="javascript:void(0);" onclick="plusKarma(\''.$target.'\', '.$target_id.');" title="'.$_LANG['LIKE'].'"><img src="/components/users/images/karma_up.png" alt="Карма+"/></a> ';
  23. $control .= '<a href="javascript:void(0);" onclick="minusKarma(\''.$target.'\', '.$target_id.');" title="'.$_LANG['UNLIKE'].'"><img src="/components/users/images/karma_down.png" alt="Карма-"/></a>';
  24. $control .= '</div>';
  25. }
  26. }
  27.  
  28. if ($control){
  29. $html .= '<div class="karma_buttons">';
  30. $html .= '<div id="karmactrl">'.$control.'</div>';
  31. $html .= '</div>';
  32. }
  33.  
  34. return $html;
  35.  
  36. }
  37.  
Заменяем на:
  1. function cmsKarmaButtons($target, $target_id, $points = 0, $is_author = false){
  2.  
  3. $inUser = cmsUser::getInstance();
  4. $inPage = cmsPage::getInstance();
  5. $html = '';
  6. $control = '';
  7. $raiting=$inUser->rating;
  8. global $_LANG;
  9.  
  10. if (!$points) {
  11. $postkarma = cmsKarma($target, $target_id);
  12. $points = cmsKarmaFormat($postkarma['points']);
  13. } else {
  14. $points = $points;
  15. }
  16.  
  17. //PREPARE RATING FORM
  18. if ($inUser->id && !$is_author){
  19. if(!cmsAlreadyKarmed($target, $target_id, $inUser->id)){
  20. $inPage->addHeadJS('core/js/karma.js');
  21.  
  22. $control .= '<div style="text-align:center">';
  23. if (($raiting >= 50) ||($inUser->is_admin)) {
  24. $control .= '<a href="javascript:void(0);" onclick="plusKarma(\''.$target.'\', '.$target_id.');" title="'.$_LANG['LIKE'].'"><img src="/components/users/images/karma_up.png" alt="Карма+"/></a> ';
  25. } if (($raiting >= 100) ||($inUser->is_admin)) {
  26. $control .= '<a href="javascript:void(0);" onclick="minusKarma(\''.$target.'\', '.$target_id.');" title="'.$_LANG['UNLIKE'].'"><img src="/components/users/images/karma_down.png" alt="Карма-"/></a>';
  27. }
  28. $control .= '</div>';
  29.  
  30. }
  31. }
  32.  
  33. if ($control){
  34. $html .= '<div class="karma_buttons">';
  35. $html .= '<div id="karmactrl">'.$control.'</div>';
  36. $html .= '</div>';
  37. }
  38.  
  39. return $html;
  40.  
  41. }
  42.  
Теперь находим в нашем измененном коде:
if (($raiting >= 50) || ($inUser->is_admin)) и цифру 50 заменяем на тот уровень рейтинга, при котором пользователь сможет только плюсовать, но не сможет минусовать.
Далее находим if (($raiting >= 100) ||($inUser->is_admin)) и меняем 100 на уровень рейтинга при котором пользователь сможет минусовать.

Разграничим голосования в статьях:
Находим код:
  1. function cmsKarmaButtonsText($target, $target_id, $points = 0, $is_author = false){
  2.  
  3. $inUser = cmsUser::getInstance();
  4. $inPage = cmsPage::getInstance();
  5. $html = '';
  6.  
  7. if (!$points) {
  8. $postkarma = cmsKarma($target, $target_id);
  9. $points = cmsKarmaFormat($postkarma['points']);
  10. } else {
  11. $points = $points;
  12. }
  13.  
  14. $control = '';
  15. //PREPARE RATING FORM
  16. if ($inUser->id && !$is_author){
  17. if(!cmsAlreadyKarmed($target, $target_id, $inUser->id)){
  18. $inPage->addHeadJS('core/js/karma.js');
  19. $control .= '<span>';
  20. $control .= '<a href="javascript:void(0);" onclick="plusKarma(\''.$target.'\', '.$target_id.');" style="color:green">Нравится</a> &uarr; ';
  21. $control .= '<a href="javascript:void(0);" onclick="minusKarma(\''.$target.'\', '.$target_id.');" style="color:red">Не нравится</a> &darr;';
  22. $control .= '</span>';
  23. $html .= '<span class="karma_buttons">';
  24. $html .= '<span id="karmactrl">'.$control.'</span>';
  25. $html .= '</span>';
  26. }
  27. }
  28. return $html;
  29. }
  30.  
Заменяем на:
  1. function cmsKarmaButtonsText($target, $target_id, $points = 0, $is_author = false){
  2.  
  3. $inUser = cmsUser::getInstance();
  4. $inPage = cmsPage::getInstance();
  5. $html = '';
  6. $raiting=$inUser->rating;
  7.  
  8. if (!$points) {
  9. $postkarma = cmsKarma($target, $target_id);
  10. $points = cmsKarmaFormat($postkarma['points']);
  11. } else {
  12. $points = $points;
  13. }
  14.  
  15. $control = '';
  16. //PREPARE RATING FORM
  17. if ($inUser->id && !$is_author){
  18. if(!cmsAlreadyKarmed($target, $target_id, $inUser->id)){
  19. $inPage->addHeadJS('core/js/karma.js');
  20. $control .= '<span>';
  21. if (($raiting >= 50) ||($inUser->is_admin)) {
  22. $control .= '<a href="javascript:void(0);" onclick="plusKarma(\''.$target.'\', '.$target_id.');" style="color:green">Нравится</a> &uarr; ';
  23. } if (($raiting >= 100) ||($inUser->is_admin)) {
  24. $control .= '<a href="javascript:void(0);" onclick="minusKarma(\''.$target.'\', '.$target_id.');" style="color:red">Не нравится</a> &darr;';
  25. }
  26. $control .= '</span>';
  27. $html .= '<span class="karma_buttons">';
  28. $html .= '<span id="karmactrl">'.$control.'</span>';
  29. $html .= '</span>';
  30. }
  31. }
  32. return $html;
  33. }
  34.  
Теперь находим в нашем измененном коде:
if (($raiting >= 50) || ($inUser->is_admin)) и цифру 50 заменяем на тот уровень рейтинга, при котором пользователь сможет только плюсовать, но не сможет минусовать.
Далее находим if (($raiting >= 100) ||($inUser->is_admin)) и меняем 100 на уровень рейтинга при котором пользователь сможет минусовать.
Скачать изменёный файл
+1
Katerina Katerina 13 лет назад #
Как здорово. Да еще все расписано. Спасибо большое.
Давно мечтала. После обеда попробую. +
+1
maia maia 13 лет назад #
Очень такое нужно, спасибо!
0
picaboo picaboo 13 лет назад #
спасибо. очень нужная доработка. вообще бы в идеале во второй линейке подобное иметь надо. чтобы любой модуль или компонент включал еще в настройках доступ по карме или рейтингу. социальное регулирование есть, а никак в движке не используется.
0
qwest qwest 13 лет назад #
Поддерживаю +
+1
Katerina Katerina 13 лет назад #
Еще раз спасибо большое, все работает замечательно.

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

Спасибо.
+1
Михаил М. Михаил М. 13 лет назад #
Сделаю на днях :)
0
Katerina Katerina 13 лет назад #
Спасибо. Буду очень признательна.
0
lezginka.ru lezginka.ru 13 лет назад #
Михаил, а где стандартное голосование в фотоальбомах ?
чего-то не найду :(
0
lezginka.ru lezginka.ru 13 лет назад #
нашел, оказывается голосование видно всем, но не админу :(

Еще от автора

Система оценок пользователей в общих и личных фотоальбомах.
Плагин позволяет зарегистрированным пользователям оценивать фото в общих и личных фотоальбомах, по пятибалльной шкале (т.е. от 1 до 5).
Вывод голосовавших за фото, в постах блога и статьях сайта (3в1)
Всем привет! Поступило предложение объединить три ранее созданных плагина выводивших голосовавших в один, сделав одной кнопкой.
Вывод голосовавших (+/-) за фото.
Плагин выводит голосовавших за фото в общих альбомах.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.