Действительно, почему в MosetsTree можно проголосовать лишь один раз?
Прежде чем ответить на вопрос, давайте разберёмся о чём вопрос. Вопрос состоит в том, что в настройках какого-либо компонента, будь то MosetsTree или какой-либо другой, содержащий в себе функционал голосования (выставления рейтингов), есть такой параметр как «Один ip-адрес равен одному голосу», что в принципе логично для избежания накрутки голосов. Но, к великому удивлению, пытаясь проголосовать даже с разных компьютеров, имеющих разные ip-адреса, не всегда это удаётся.
«Ничего подобного» — воскликните Вы. «Да, да, такое бывает» — отвечу я, и расскажу, почему.
Да, действительно, эта проблема встречается крайне редко, но думаю даже те, кто столкнулся с ней, заслуживают помощи в её решении.
Описанное в статье решение применимо ко всем версиям MosetsTree
Как это работает?
Для начала, давайте посетим очень удобный сайт, чтобы узнать ip-адрес своего компьютера, а затем, ip-адрес сайта, на котором испытываем проблему.
Запоминаем их. Теперь необходимо найти в файлах компонента на сайте функцию, отвечающую за запись рейтинга в базу данных. Т.к. в данной статье мы разбираем конкретную проблему с MosetsTree, открываем файл /components/com_mtree/mtree.php и смотрим, с помощью какого индекса компонент получает ip-адрес конечного пользователя на сайте. Видим строки вида:
$vote_ip = JRequest::getCmd( 'REMOTE_ADDR', '', 'server');
$remote_addr = JRequest::getCmd( 'REMOTE_ADDR', '', 'server');
Прежде чем что-либо исправлять, давайте проверим, какой ip-адрес отдает нам сервер по данному индексу, для этого, в корне сайта создадим php-файл, не важно с каким названием (например info.php). В созданном файле пишем:
<?php print_r($_SERVER['REMOTE_ADDR']); ?>
Обращаемся к созданному файлу по ссылке вида http://САЙТ/info.php
Смотрим и видим, что ip-адрес отдаваемый сервером является не адрес нашего компьютера, а адрес самого сайта. Т.е. получается, что каждый новый посетитель сайта, независимо с какого компьютера, и с какого ip-адреса он зашел, голосует адресом этого сайта. А как мы помним из настроек компонента: «Один ip-адрес равен одному голосу». Вот и ответ на вопрос, почему в MosetsTree можно проголосовать лишь один раз.
Теперь, нужно исправить эту проблему, для этого открываем интересную статью, читаем её, выясняем для себя по какому индексу отдается правильный ip адрес. Открываем файл /components/com_mtree/mtree.php и файл /components/com_mtree/Savant2/Savant2_Plugin_ratableRating.php и заменяем все встретившиеся индексы REMOTE_ADDR в файле на нужный. Важно не перепутать индекс и название переменной, в которую записывается значение.
В моём случае вполне достаточно было изменить REMOTE_ADDR на HTTP_X_REAL_IP
Описанный выше примере поможет также легко решить проблему и в других компонентах, главное найти функцию записи рейтинга.
Надеюсь, кому-то поможет данное решение.
Комментарии
Здесь еще никто не оставлял комментарии.