Система оценок пользователей в общих и личных фотоальбомах.

+86
3.06K
Плагин позволяет зарегистрированным пользователям оценивать фото в общих и личных фотоальбомах, по пятибалльной шкале (т.е. от 1 до 5).
Принцип работы:
Пользователь загрузивший фото не может ставить к своим фото оценки.
-Ставить оценку к фото можно только один раз.
-Средний бал фото округляется в большую сторону, чтобы не обижать хозяина фото (т.е. если сред.бал 3,5 то отобразиться 4, чтобы не обижать хозяина фото)
-Ставить оценки могут только зарегистрированные пользователи.
-Подгрузка на страницу поставивших оценки к фото происходит при помощи ajax.

Иллюстрация
Установка:
Устанавливается как обычный плагин.
Для подключения к общим фотоальбомам:
Откройте файл com_photos_view_photo.tpl из вашего шаблона
И в том месте где будет выводится система баллов вставьте
  1.  
  2. {*======== Средний бал фото ===============*}
  3. {if $bal != ''}
  4. <div class="points" style="text-align:center;">Средний бал: {$bal}</div>
  5. {/if}
  6. {*======== вывод оценки голосовавшего после фото ===============*}
  7. {if $points !=''}
  8. <div class="points" style="text-align:center;">Ваша оценка:</div>
  9. <div class="point{$points}" style="margin: 0 auto;"></div>
  10. {else}
  11. {if $to_userid}
  12. {if $photo.user_id != $to_userid}
  13. {*========== система оценок ===============*}
  14. <div class="point">
  15. <input type="hidden" name="item_id" value="{$item_id}">
  16. <input type="hidden" name="user_id" value="{$photo.user_id}">
  17. <input type="hidden" name="to_userid" value="{$to_userid}">
  18. <a class="point1" href="javascript:void(0)" onclick="votes('1')"></a>
  19. <a class="point2" href="javascript:void(0)" onclick="votes('2')"></a>
  20. <a class="point3" href="javascript:void(0)" onclick="votes('3')"></a>
  21. <a class="point4" href="javascript:void(0)" onclick="votes('4')"></a>
  22. <a class="point5" href="javascript:void(0)" onclick="votes('5')"></a>
  23. </div>
  24.  
  25. {/if}
  26. {/if}
  27. {/if}
  28. {*=============вывод тех кто ставил оценки===============*}
  29. {if $golosov != ''}
  30. <div class="users_votes_golos">
  31. <input type="hidden" name="item_id" value="{$item_id}">
  32. <div id="pole"></div><div id="ssilk_votes"><a href="#" id="votes">Поставили оценки ({$golosov})</a></div>
  33. <div id="flashs"></div>
  34. <div id="votes_golos"></div>
  35. </div>
  36. <div class="clear"></div>
  37. {/if}
  38. {*=======================================*}
  39.  
В файл сss добавить:(есть в архиве)

Всё к общим фотоальбомам он подключён.
Подключение к личным фотоальбомам:
Для того чтобы плагин заработал в личных фотоальбомах пользователей необходимо открыть файл
/components/users/frontend.php
и найти
  1. $photo = $inDB->fetch_assoc($result);
строка 1694
после которой прописать
  1. $photo = cmsCore::callEvent('GET_USER_PHOTO', $photo);
у нас должно получиться
  1. /////////////////////////////// VIEW PHOTO /////////////////////////////////////////////////////////////////////////////////////////
  2. if ($do=='viewphoto'){
  3. if (!$cfg['sw_photo']) { cmsCore::error404(); }
  4. if (!$inUser->id && !$cfg['sw_guest']) {
  5. cmsUser::goToLogin();
  6. }
  7. $photoid = $inCore->request('photoid', 'int', 0);
  8. $user_id = $inUser->id;
  9. $myprofile = ($user_id == $id) ? true : false;
  10. $usr = $model->getUserShort($id);
  11. if (!$usr) { cmsCore::error404(); }
  12. $sql = "SELECT p.*, a.title as album, pr.gender
  13. FROM cms_user_photos p
  14. INNER JOIN cms_user_albums a ON a.id = p.album_id
  15. INNER JOIN cms_user_profiles pr ON pr.user_id = p.user_id
  16. WHERE p.id = '$photoid' AND p.user_id = '$id'
  17. LIMIT 1";
  18. $result = $inDB->query($sql) ;
  19. if (!$inDB->num_rows($result)){ cmsCore::error404(); }
  20. $photo = $inDB->fetch_assoc($result);
  21. $photo = cmsCore::callEvent('GET_USER_PHOTO', $photo);
  22. $inPage->setTitle($photo['title']);
  23. $inPage->addPathway($usr['nickname'], cmsUser::getProfileURL($usr['login']));
  24. $inPage->addPathway($_LANG['PHOTOALBUMS'], '/users/'.$usr['id'].'/photoalbum.html');
  25. $inPage->addPathway($photo['album'], '/users/'.$usr['login'].'/photos/private'.$photo['album_id'].'.html');
  26. $inPage->addPathway($photo['title'], $_SERVER['REQUEST_URI']);
  27. $photo['pubdate'] = $inCore->dateFormat($photo['pubdate'], true, false, false);
  28. $photo['genderlink'] = cmsUser::getGenderLink($usr['id'], $usr['nickname'], 0, $photo['gender'], $usr['login']);
  29. $photo['filesize'] = round(filesize(PATH.'/images/users/photos/medium/'.$photo['imageurl'])/1024, 2);
  30. //ссылки на предыдущую и следующую фотографии
  31. $previd = $inDB->get_fields('cms_user_photos', "id>'{$photo['id']}' AND user_id = '{$usr['id']}' AND album_id='{$photo['album_id']}'", 'id, title, pubdate', 'id ASC');
  32. $nextid = $inDB->get_fields('cms_user_photos', "id<'{$photo['id']}' AND user_id = '{$usr['id']}' AND album_id='{$photo['album_id']}'", 'id, title, pubdate', 'id DESC');
  33. // Проверяем права доступа
  34. $is_allow = usrAllowed($photo['allow_who'], $id) || $inCore->userIsAdmin($inUser->id) ? true : false;
  35. // Если видим фото, обновляем просмотры
  36. if ($is_allow) { $inDB->query("UPDATE cms_user_photos SET hits = hits + 1 WHERE id = ".$photo['id']) ;
  37. $smarty = $inCore->initSmarty('components', 'com_users_photos_view.tpl');
  38. $smarty->assign('photo', $photo);
  39. $smarty->assign('bbcode', '[IMG]'.HOST.'/images/users/photos/medium/'.$photo['imageurl'].'[/IMG]');
  40. $smarty->assign('previd', $previd);
  41. $smarty->assign('nextid', $nextid);
  42. $smarty->assign('usr', $usr);
  43. $smarty->assign('myprofile', $myprofile);
  44. $smarty->assign('is_admin', $inCore->userIsAdmin($user_id));
  45. $smarty->assign('is_allow', $is_allow);
  46. if($is_allow){
  47. $inCore->loadLib('tags');
  48. $smarty->assign('tagbar', cmsTagBar('userphoto', $photo['id']));
  49. }
  50. $smarty->display('com_users_photos_view.tpl');
  51.  
  52. //show user comments
  53. if($inCore->isComponentInstalled('comments') && $is_allow){
  54. $inCore->includeComments();
  55. comments('userphoto', $photo['id']);
  56. }
  57.  
  58. }
Это необходимо для того чтобы плагин работал в личных фотоальбомах.
Далее открываем файл com_users_photos_view.tpl
И прописываем там где будут оценки:
  1. {*======== Средний бал фото ===============*}
  2. {if $bal_user_photo != ''}
  3. <div class="points" style="text-align:center;">Средний бал: {$bal_user_photo}</div>
  4. {/if}
  5. {*======== вывод оценки голосовавшего после фото ===============*}
  6. {if $points_user_photo !=''}
  7. <div class="points" style="text-align:center;">Ваша оценка:</div>
  8. <div class="point{$points_user_photo}" style="margin: 0 auto;"></div>
  9. {else}
  10. {if $to_userid}
  11. {if $photo.user_id != $to_userid}
  12. {*========== система оценок ===============*}
  13. <div class="point">
  14. <input type="hidden" name="item_id" value="{$item_id}">
  15. <input type="hidden" name="user_id" value="{$photo.user_id}">
  16. <input type="hidden" name="to_userid" value="{$to_userid}">
  17. <a class="point1" href="javascript:void(0)" onclick="uservotes('1')"></a>
  18. <a class="point2" href="javascript:void(0)" onclick="uservotes('2')"></a>
  19. <a class="point3" href="javascript:void(0)" onclick="uservotes('3')"></a>
  20. <a class="point4" href="javascript:void(0)" onclick="uservotes('4')"></a>
  21. <a class="point5" href="javascript:void(0)" onclick="uservotes('5')"></a>
  22. </div>
  23. {*=======================================*}
  24. {/if}
  25. {/if}
  26. {/if}
  27. {if $golosov_user_photo != ''}
  28. <div class="users_votes_golos">
  29. <input type="hidden" name="item_id" value="{$item_id}">
  30. <div id="pole"></div><div id="ssilk_votes"><a href="#" id="userphotovotes">Поставили оценки ({$golosov_user_photo})</a></div>
  31. <div id="flashs"></div>
  32. <div id="votes_golos"></div>
  33. </div>
  34. <div class="clear"></div>
  35. {/if}
Если файлы com_users_photos_view.tpl и com_photos_view_photo.tpl не отличаются от дефолтных то можно взять из архива.

В работе плагин можно увидеть:
Общий фотоальбом (demo.здравствуй22.рф/photos/1)
Личный фотоальбом (demo.здравствуй22.рф/users/4/photo57.html)
Необходима авторизация логин: demo1 пароль:111111
или зарегистрируйтесь на сайте.

В дополнение к плагину планируется:
Плагин в профиль пользователя к каким фото им были поставлены оценки.
Модуль:
-Топ по баллам и голосам фото в общих фотоальбомах.
-Топ по баллам и голосам фото в личных фотоальбомах.
Также планирую создание фотоконкурса

СКАЧАТЬ

Кто хочет может отблагодарить меня:
R251157170572
Z354892323501
Яд: 410011059385495

========================
У lezginka.ru возникла идея выводить средний бал
таким образом:
--------------------
Рейтинг: 0
Просмотров: 15
Средний бал: 4

Реализуем задуманное. Для этого открываем файл com_photos_view_photo.tpl из вашего шаблона
и находим строчки
  1.  
  2. <p><strong>{$LANG.RATING}: </strong><span id="karmapoints">{$photo.karma}</span></p>
  3. <p><strong>{$LANG.HITS}: </strong> {$photo.hits}</p>
ниже вставляем:
  1. {if $bal != ''}<p><strong>Средний бал: </strong> {$bal}</p>{/if}
и убираем:
  1. {*======== Средний бал фото ===============*}
  2. {if $bal != ''}
  3. <div class="points" style="text-align:center;">Средний бал: {$bal}</div>
  4. {/if}
  5.  
а то у нас будут выводиться оба варианта, оставляем только:
  1. {*======== вывод оценки голосовавшего после фото ===============*}
  2. {if $points !=''}
  3. <div class="points" style="text-align:center;">Ваша оценка:</div>
  4. <div class="point{$points}" style="margin: 0 auto;"></div>
  5. {else}
  6. {if $to_userid}
  7. {if $photo.user_id != $to_userid}
  8. {*========== система оценок ===============*}
  9. <div class="point">
  10. <input type="hidden" name="item_id" value="{$item_id}">
  11. <input type="hidden" name="user_id" value="{$photo.user_id}">
  12. <input type="hidden" name="to_userid" value="{$to_userid}">
  13. <a class="point1" href="javascript:void(0)" onclick="votes('1')"></a>
  14. <a class="point2" href="javascript:void(0)" onclick="votes('2')"></a>
  15. <a class="point3" href="javascript:void(0)" onclick="votes('3')"></a>
  16. <a class="point4" href="javascript:void(0)" onclick="votes('4')"></a>
  17. <a class="point5" href="javascript:void(0)" onclick="votes('5')"></a>
  18. </div>
  19.  
  20. {/if}
  21. {/if}
  22. {/if}
  23. {*=============вывод тех кто ставил оценки===============*}
  24. {if $golosov != ''}
  25. <div class="users_votes_golos">
  26. <input type="hidden" name="item_id" value="{$item_id}">
  27. <div id="pole"></div><div id="ssilk_votes"><a href="#" id="votes">Поставили оценки ({$golosov})</a></div>
  28. <div id="flashs"></div>
  29. <div id="votes_golos"></div>
  30. </div>
  31. <div class="clear"></div>
  32. {/if}
  33. {*=======================================*}
Да у чуть не забыл, для того чтобы наши кнопки рейтинга не располагались по середине относительно записей находим ниже,
  1. <td width="25">{$photo.karma_buttons}</td>
и заменяем на
  1. <td valign="top" width="25">{$photo.karma_buttons}</td>
+4
Роман Роман 12 лет назад #
Отличный социальный плагин
+1
lezginka.ru lezginka.ru 12 лет назад #
+
+3
lezginka.ru lezginka.ru 12 лет назад #
а нельзя еще выводить "Средний бал: 4"
вот так :
--------------------
Рейтинг: 0
Просмотров: 15
Средний бал: 4
+5
Михаил М. Михаил М. 12 лет назад #
Можно и так, только код немного поправить надо будет. Я правильно понял это в общих альбомах. 7 января день рождения пройдёт и сделаю....
+1
livecom livecom 12 лет назад #
Можно вопрос? А зачем тогда рейтинг оставлять, если ставишь "средний бал"? Пользователи путаться не будут?
0
Владимир Владимир 11 лет назад #
Рейтинг участвует в сортировке + влияет на рейтинг пользователя опубликовавшего фотографию.
+1
Олег Олег 12 лет назад #
Отличный плаин
+++++++++++++++
+1
Malstein Malstein 12 лет назад #
Отличное дополнение буду ставить!Спасибо!!! и С ДНЕМ РОЖДЕНИЯ Михаил!!!!)))
0
Darik Darik 12 лет назад #
спасибо +1 и $ Днем Рождения! и С Рождеством всех!
0
fact fact 12 лет назад #
начало замечательное.
Плагин в профиль пользователя к каким фото им были поставлены оценки + к каждому фото в личном альбоме кто какие оценки поставил (пусть будут видны например только самому хозяину) + модуль топ личных фото пользователя с общими оценками
всё это с учётом приватности отображения . т.е для каждого пользователя будет видна только та оценка которая стоит в приватности отображения фото(для друзей, для всех зарег, для всех)

можно например чтобы оценки другими пользователями по каждому фото мог видеть только хозяин фото, а общую оценку уже все.
Ещё как вариант при оценке фото хозяину приходит сообщение что фото оценили)

во общем за реализацию этого обязательно будет вээмзет лично от меня!
Очень важна такая реализация!
+2
SP SP 12 лет назад #
Отличная штука! Вывод рейтинга по оценкам модулем на главной очень нужен, ждем реализации smile Спасибо!
0
SP SP 12 лет назад #
... а средний бал наверное интересней будет округлять не до целой, а до десятой... так: "средний бал: 4,5"
+1
Михаил М. Михаил М. 12 лет назад #
Можно без проблем сделать второй вариант плагина который будет выводить средний бал с округлением до десятой ... в виде 4,5
0
Белгородский Бомж Белгородский Бомж 12 лет назад #
Спасибо! Отличная вещь.
Вывод десятых в оценках решил следующим способом:
в файле plugins/p_votes/plugin.php заменил строку 141
$bal = ceil($usr['bal']);
на
$bal = ceil(($usr['bal'])*10)/10;
+1
Михаил М. Михаил М. 12 лет назад #
Для дополнения картины тогда можно так (как ещё вариант)
Код PHP:
$bal = ceil($usr['bal']);
на
Код PHP:
$bal     = round($usr['bal'],1);
0
Алексей Алексей 12 лет назад #
А у меня проблема, не показывает "Ваша Оценка" версия 1.9 у друга на 1.8 работает.
+2
Михаил М. Михаил М. 12 лет назад #
Проверьте наличие изображения ocenka_big.png в папке images вашего шаблона, и наличие всех css условий таких как .point1,.point2,.point2,.point4,.point5 в css файле вашего шаблона
0
Алексей Алексей 12 лет назад #
Проверил, всё есть. Но проблема осталось всё тажа.
0
Amurland Amurland 12 лет назад #
Отличный плагин! Спасибо!
+1
Soul Soul 12 лет назад #
Отличная работа! так держать!
0
Алексей Алексей 12 лет назад #
Спасибо большое, хороший плагин, и правду причина была в css)
0
Олег Олег 12 лет назад #
А можно как нибудь сделать оповещение о новых оценках пользователю в личные сообщения и на эллектроную почту
+3
Михаил М. Михаил М. 12 лет назад #
Сделал уже, как будет время выложу.
+2
Soviet-Girl Soviet-Girl 12 лет назад #
Было бы вообще супер, если бы выложили.
+1
Dinar Dinar 12 лет назад #
По фотоконкурсу наработок еще нет?

З.ы. доберусь до компа с все, с меня донейт joke
+1
Dinar Dinar 12 лет назад #
..с вебмани*
+6
Михаил М. Михаил М. 12 лет назад #
По фотоконкурсу идёт работа! Скоро будет готов!!!
0
Dinar Dinar 12 лет назад #
Отлично - первая часть стимула, для дальнейшей работы, ушла на R кошелек :)
0
Дастан Дастан 12 лет назад #
Извините за тупой вопрос! Там у вас внизу картины стоят ссылки "предыдущая" и "следующая". Как такое реализовать?
0
Patriot Patriot 12 лет назад #
Эти ссылки уже реализованы в скрипте.
0
vitalson9 vitalson9 12 лет назад #
подскажите в чём может быть ошибка версия движка 1.9
0
• Mike • • Mike • 12 лет назад #
это не ошибка — это нотация (“типа” уведомления), информирует о том, что переменная не определена перед использованием, только и всего…
отключите полный показ сообщений об ошибках установив
Код PHP:
Error_Reporting(E_ALL & ~E_NOTICE & ~E_WARNING);
в файле index.php в корне сайта, после этого будут показываться только критические ошибки…
+1
danial99 danial99 12 лет назад #
класс спасибо Михаил М. за плагин!А не подскажете как реализовать оповещение хозяину фото что за него проголосавали?
0
bondar bondar 12 лет назад #
поставил, но вообще ничего не появилось(( нет никакой реакции
+1
mk727 mk727 11 лет назад #
Уважаемые разработчики, огромное спасибо Вам за Ваши разработки. Но практически все забывают что не у всех префикс базы данных стоит по умолчанию cms. Уверен на 99% что у пользователя из предыдущего комментария также префикс отличается. Нужно найти в папке plugins\p_votes все строки с вхождением cms_votes_photo и заменить на vashprefiks_votes_photo. Легко это сделать Нотпадом поиском и заменой по файлам в определенной папке.
+1
BlondinkO BlondinkO 11 лет назад #
И у меня не отображается :(
Префикс стандартный.
+1
BlondinkO BlondinkO 11 лет назад #
А нет, работает smile
Не отображается, видимо, для СВОИХ фото :)

Спасибо большое!
0
My-InstantCMS.Ru My-InstantCMS.Ru 11 лет назад #
Всё сделал правильно, но ничего не появилось. версия 1.9
+1
fact fact 11 лет назад #
всё супер. Ещё бы модуль лучших оценок
+2
Игорь Игорь 11 лет назад #
Вот бы такое на 1.10
+1
AlLar AlLar 11 лет назад #
На 1.10.1 - было бы круто!
+1
volchoc volchoc 10 лет назад #
AlLar, в твоем комменте
На 1.10.1 - было бы круто!
на "-" нажал нечаянно, прошу прощения, хотел нажать "+". У меня тоже 1.10.1
+1
Шадринец Шадринец 10 лет назад #
Привет, присоединяюсь к вопросу планируется для 1.10+
+1
Dinar Dinar 10 лет назад #
Забудьте уже.. Последний визит: 423 дня назад
+1
onlinespr onlinespr 10 лет назад #
Там всего пару строк надо изменить для 1.10+ версии
0
Димитриус Димитриус 10 лет назад #
Вы уже всё поправили?
Если надо могу выполнить на заказ.
+1
onlinespr onlinespr 10 лет назад #
Да, с помощью поиска на сайте нашел, как правильно указывать в версии 1.10+ smile
0
Александр Александр 9 лет назад #
а если не секрет, что именно (а то это раньше у меня было основным на сайте, очень хорошее дополнение еще с 1.8)
жаль, что сейчас наверняка не пойдет уже под новую версию, но надеюсь на чудо, что то сделает или опишет что изменить
+1
onlinespr onlinespr 9 лет назад #
пишите в личку
+1
ZmeeLove ZmeeLove 10 лет назад #
выложите пожалуйста для вертии 1.10
Заранее спасибо!
0
Шадринец Шадринец 8 лет назад #
На 1.10.3 в общих фото работает,беда с личьными фото.
Ставиш оценку на одно фото ,а оценки сразу на всех появляются.
Подскажите что не так?
Пологаю в этом файле.
/components/users/frontend.php
найти вот эту строчьку которой в 1.10.3 нет.
Код PHP:
  1. $photo = $inDB->fetch_assoc($result);
после которой прописать вот это,
Код PHP:
  1. $photo = cmsCore::callEvent('GET_USER_PHOTO', $photo);
Так как там совсем другие строки Подскажите что поправить в скрипте.
Это необходимо для того чтобы плагин работал в личных фотоальбомах.

Нужно вставить после.
Код PHP:
  1. //============================================================================//
  2. //======================== Работа с фотографиями ============================//
  3. //============================================================================//
  4. if ($do=='photos'){
  5. if (!$model->config['sw_photo']) { cmsCore::error404(); }
Или всетаки ошибка в ...
Далее открываем файл com_users_photos_view.tpl
Код PHP:
  1. {*======== Средний бал фото ===============*}
  2. {if $bal_user_photo != ''}
  3. <div class="points" style="text-align:center;">Средний бал: {$bal_user_photo}</div>
  4. {/if}
  5. {*======== вывод оценки голосовавшего после фото ===============*}
  6. {if $points_user_photo !=''}
  7. <div class="points" style="text-align:center;">Ваша оценка:</div>
  8. <div class="point{$points_user_photo}" style="margin: 0 auto;"></div>
  9. {else}
  10. {if $to_userid}
  11. {if $photo.user_id != $to_userid}
  12. {*========== система оценок ===============*}
  13. <div class="point">
  14. <input type="hidden" name="item_id" value="{$item_id}">
  15. <input type="hidden" name="user_id" value="{$photo.user_id}">
  16. <input type="hidden" name="to_userid" value="{$to_userid}">
  17. <a class="point1" href="javascript:void(0)" onclick="uservotes('1')"></a>
  18. <a class="point2" href="javascript:void(0)" onclick="uservotes('2')"></a>
  19. <a class="point3" href="javascript:void(0)" onclick="uservotes('3')"></a>
  20. <a class="point4" href="javascript:void(0)" onclick="uservotes('4')"></a>
  21. <a class="point5" href="javascript:void(0)" onclick="uservotes('5')"></a>
  22. </div>
  23. {*=======================================*}
  24. {/if}
  25. {/if}
  26. {/if}
  27. {if $golosov_user_photo != ''}
  28. <div class="users_votes_golos">
  29. <input type="hidden" name="item_id" value="{$item_id}">
  30. <div id="pole"></div><div id="ssilk_votes"><a href="#" id="userphotovotes">Поставили
  31. оценки ({$golosov_user_photo})</a></div>
  32. <div id="flashs"></div>
  33. <div id="votes_golos"></div>
  34. </div><div class="clear"></div>
  35. {/if}

0
Настёна Настёна 7 лет назад #
я сделала вот так

Код PHP:
  1. //============================================================================//
  2. //======================== Работа с фотографиями ============================//
  3. //============================================================================//
  4. if ($do=='photos'){
  5. if (!$model->config['sw_photo']) { cmsCore::error404(); }
  6. $pdo = cmsCore::request('pdo', 'str', '');
  7. $photo = cmsCore::callEvent('GET_USER_PHOTO', $photo);
  8. include 'components/users/photos.php';
  9. }
все работает!
0
Настёна Настёна 7 лет назад #
версия 1.10.1

Еще от автора

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