Как сделать рейтинг для статей на сайте, работающим на MODX?
Здравствуйте.
Не подскажите, как организовать рейтинг для статей в MODX?
Есть расширения в разных репозиториях, но одни, как правило, устаревшие и глючные, а другие работают только при авторизации пользователя.
Может можно как-то просто организовать рейтинг, без авторизации? С подсчётом рейтинга, анти-спамом и без дополнительных ссылок.
Есть дополнение новое на хосте, xLike. Но там процентная оценка. А для снипетов поисковика нужно вроде бы 5-ти бальная система.
Спасибо.
Ответы: 24
Не работает. Почему - не понятно. Звезды отображаются, походу проблемы с JS ибо при нажатии на звезду ничего не происходит. Помогите, пожалуйста, нубу.
Есть огромные подозрения что сниппет canonical, ибо уже были проблемы с путями в другом месте.Вот логи:
Проект уже давно доступен в официальном репозитории MODX. Попробуйте его загрузить от туда и установить. Называется он FiveStarRating.
Из репозитория ставил - не работает. В разных браузерах смотрел - не работает.
Попробуйте очистить кэш сайта. Кроме этого попробуйте открыть станицу в браузере в режиме инкогнито и проверить работу звёздного рейтинга в нём.
Все выше перечисленное делал - результат 0.
По ошибкам гуглил - подобные проблемы встречаются у людей, но ни на одном форуме решения не нашел. Дело не в этом компоненте, скорее всего, а в багах самого MODX. Куда не зайду - у людей вечно что-то не работает, и никто не знает в чем проблема. Я уже год с этим MODX парюсь, и так и не смог сделать полноценный сайт с нужным функционалом. Уже просто руки опускаются.Может попробовать другой хостинг или развернуть это дело у себя на компьютере.
Здравствуйте, но если только на TV полях. Одно TV использовать для хранения результата, а другое - для IP-адресов (для защиты от накрутки). Или нужно как-то по другому?
Кстати, Александр, скажите почему у ваших постов нету рейтинга?
Не сделал, потому что не было подходящего дополнения. Все, которые были — не подходили.
Всё-таки решил реализовать это в виде компонента. Загрузить его можно пока отсюда. Исходные коды на GitHub. Проект SimpleRating.
Принцип работы: добавить в шаблон или чанк вызов сниппета
Защита от спама осуществляется на основе IP адресов. Немного попозже опубликую статью по этому компоненту.getSimpleRating
:Александр спасибо, прям то что нужно, очень хорошо вышло.
Установил, почистил кеш.
Разместил его в шаблоне
[[!getSimpleRating]]
, появился, работает, все очень здорово.Пробую проголосовать с 5-ти разных точек, у всех разные IP - не дает возможности голосовать. Вот я один раз как проголосовал, он отметил звездочки и проставил рейтиг и 1 голос. Все, с других мест\заходов он уже голосовать вообще не дает.
И еще один момент. Александр, скажите пожалуйста, правильно ли я понимаю. Я хочу отключить подстановку js и css файлов. Для этого я просто в сниппете
getSimpleRating
просто удаляю 2-ве начальные строчки и прописываю руками их в шаблоне.Он проверяет по внешнему IP-адресу. Узнать внешний IP можно, например, на 2ip.ru.
Проверить работоспособность дополнения можно очень просто следующим способом:1) Открыть базу данных, например, с помощью phpmyadmin.
2) Найти в базе таблицупрефикс_simple_rating
, открыть её содержимое.3) Найти в таблице строку соответствующую определенному ресурсу (поле
4) Нажать 2 раза на ячейкуresource
).rating_ips
и изменить ip-адрес, например, какую-нибудь одну цифру.![MODX Revolution - Изменение значения поля в базе данных](/assets/images/questions/phpmyadmin-simple-rating.png)
5) После этого проголосовать ещё раз.Александр, может тогда я что-то не правильно делаю?
У меня несколько точек выхода по Москве и несколько из Европы + мобильный инет тот же. И везде у меня не активно голосование там где уже я проголосовал.
Согласно вашему методу.
Я нашел ресурс, изменил в таблице
rating_ips
ip-адрес и у меня снова появилось возможность голосовать.Зашёл через rdp на сервак в Риге, обновил открытую страницу с ресурсом и у меня появилась возможность голосовать (до этого была не активна). Зашёл через локальную машину в Москве, обновил страницу (изначально на ней голосовал) и снова появилась возможность проголосовать.
Далее я проголосовал из Риги, обновил страницу в Москве и снова не могу голосовать. Хотя
rating_ips
был изменен и при изменении была возможность голосовать и там и там.Отключил все скрипты, перепробовал jquery - не помогло(
Немного доработал компонент. Теперь для определения IP-адреса используется родная функция MODX -
Сборка доступна по адресу: yadi.sk/d/lpMLL6zH3LpLibgetClientIp
.Попробуйте сейчас, но предварительно удалите все старые записи из таблицы
префикс_simple_rating
.Александр, удалил все записи в таблице
префикс_simple_rating
.Сбросил куки, очистил кеш.
Все тоже самое, дает проголосовать только один раз(
Создайте сниппет getIP:
Поместите его вызов в шаблон:
После этого на странице будет виден ваш ip-адрес, и вы сможете понять, почему так... Куки и кэш тут роли не играют.
Александр, сделал как вы сказали. У меня со всех мест показывает локальный адрес -
192.168.42.1
.У меня развернут виртуальный сервер (42.2), который находится на windows2012r2 (42.1).
Александр, как же тогда быть?
Может есть какое то решение для сего? xLike работал корректно вроде, в плане что не один раз голосовалось.
Это единственный более менее надёжный способ защититься от накрутки при голосовании не авторизированных пользователей.
Можно, конечно использовать cookie. Но, если они у пользователя отключены, то он сможет проголосовать много раз. Или как вариант он их может чистить перед каждым голосованием. Данный способ тоже некоторые веб-программисты используют. Но он менее надежный, чем по IP. Хотя и по IP можно тоже обойти.
Вам надо попробовать обратиться к сайту из устройства, которое не находиться в данной локальной сети и посмотреть результат. Если он будет такой же, то необходимо настроить передачу на сервер заголовка, содержащего реальный IP адрес клиента. После этого у вас всё будет работать.
В дополнении xLike работают 2 режима. Один для авторизированных пользователей. Тут понятно, учёт идёт по id пользователя. Другой, не для авторизированных пользователей. Т.е. у которых, в системе MODX, id равен
0
. Второй работает также на основе IP, плюс дополнительно ещё сохраняетsession_id
.session_id
насколько понял, автор, использует для защиты, от повторного голосования, если вдруг у пользователся поменялся IP.Единственное в xLike, если вы в авторизованы в бэкенде, а во форнтэнде нет, при голосовании, он считает вас авторизованным, и сохраняет голос как авторизованного пользователя. Если после этого открыть, например, другой браузер, в котором вы не авторизованы в админке, он позволит ещё раз проголосовать, как не авторизированному пользователю, хотя у вас будет тот же IP. Но это скорее особенность, чем ошибка.
Если необходимо, то могу настроить защиту с помощью
COOKIE
и убрать по IP.Александр, мне кажется это было бы хорошо!
Вам в самый раз разместить сей компонент на репозитории (платный\бесплатный это уже ваш выбор). Было бы хорошо что был бы у него выбор ip или куки. Почему нет?
Хорошо что зашел прочитать сию тему, а то хотел уже снимать какой трафик идет на сервачек, дабы потом в nat у 2012r2 возиться...
Доработал проект. Теперь отключить учёт по IP можно в системных настройках MODX с помощью ключа
Ссылка на транспортный пакет: yadi.sk/d/pF116mjT3LwmtR Кроме этого изображение со звёздочками имеет больший размер. Это позволит их отчётливо отображать на смартфонах.simplerating_ip
. Чтобы это сделать, его значение необходимо установить в "Нет".Компонент для загрузки доступен с основного репозитория MODX. Называется он FiveStarRating.
Александр, здравствуйте.
Вот прям то что нужно получилось! Спасибо вам за чудесный компонент)