Почему в 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-адрес равен одному голосу". Вот и ответ на вопрос, почему не удается проголосовать.

Теперь, нужно исправить эту проблему, для этого открываем интересную статью, читаем её, выясняем для себя по какому индексу отдается правильный ip адрес. Открываем файл /components/com_mtree/mtree.php и файл /components/com_mtree/Savant2/Savant2_Plugin_ratableRating.php и заменяем все встретившиеся индексы REMOTE_ADDR в файле на нужный. Важно не перепутать индекс и название переменной, в которую записывается значение.

В моём случае вполне достаточно было изменить REMOTE_ADDR на HTTP_X_REAL_IP

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

Надеюсь, кому-то поможет данное решение.


Оставьте свой комментарий

Оставить комментарий от имени гостя

0 / 2500 Ограничение символов
Ваш текст должен быть в пределах 10-2500 символов
Комментарии | Добавить свои
  • Комментарии не найдены