• MODX

Как сделать рейтинг для статей на сайте, работающим на MODX?

Здравствуйте.

Не подскажите, как организовать рейтинг для статей в MODX?

Есть расширения в разных репозиториях, но одни, как правило, устаревшие и глючные, а другие работают только при авторизации пользователя.

Может можно как-то просто организовать рейтинг, без авторизации? С подсчётом рейтинга, анти-спамом и без дополнительных ссылок.

Есть дополнение новое на хосте, xLike. Но там процентная оценка. А для снипетов поисковика нужно вроде бы 5-ти бальная система.

Спасибо.

Ответы: 24

Аноним
Аноним

Не работает. Почему - не понятно. Звезды отображаются, походу проблемы с JS ибо при нажатии на звезду ничего не происходит. Помогите, пожалуйста, нубу.

Есть огромные подозрения что сниппет canonical, ибо уже были проблемы с путями в другом месте.

Вот логи:

<code>[2017-10-10 00:53:43] (ERROR @ /home/evgek987/public_html/core/model/modx/modx.class.php : 991) `` is not a valid integer and may not be passed to makeUrl()
[2017-10-10 00:53:43] (ERROR @ /home/evgek987/public_html/core/model/modx/modresponse.class.php : 208) Attempted to redirect to an empty URL.
Аноним
Аноним

Проект уже давно доступен в официальном репозитории MODX. Попробуйте его загрузить от туда и установить. Называется он FiveStarRating.

Аноним
Аноним

Из репозитория ставил - не работает. В разных браузерах смотрел - не работает.

[2017-10-19 15:15:48] (ERROR @ /home/evgek987/public_html/core/model/modx/modx.class.php : 991) `id` is not a valid integer and may not be passed to makeUrl()
[2017-10-19 15:15:48] (ERROR in resource 49 @ /home/evgek987/public_html/core/model/modx/modparser.class.php : 1353) Bad link tag `[[˜id]]` encountered
[2017-10-19 15:15:48] (ERROR in resource 49 @ /home/evgek987/public_html/core/model/modx/modparser.class.php : 1353) Bad link tag `[[˜20]]` encountered
[2017-10-19 15:15:54] (ERROR @ /home/evgek987/public_html/core/model/modx/modx.class.php : 991) `id` is not a valid integer and may not be passed to makeUrl()
[2017-10-19 15:15:54] (ERROR in resource 50 @ /home/evgek987/public_html/core/model/modx/modparser.class.php : 1353) Bad link tag `[[˜id]]` encountered
[2017-10-19 15:15:54] (ERROR in resource 50 @ /home/evgek987/public_html/core/model/modx/modparser.class.php : 1353) Bad link tag `[[˜20]]` encountered
[2017-10-19 15:15:58] (ERROR in resource 8 @ /home/evgek987/public_html/core/model/modx/modparser.class.php : 1353) Bad link tag `[[˜20]]` encountered
Аноним
Аноним

Попробуйте очистить кэш сайта. Кроме этого попробуйте открыть станицу в браузере в режиме инкогнито и проверить работу звёздного рейтинга в нём.

Аноним
Аноним

Все выше перечисленное делал - результат 0.

По ошибкам гуглил - подобные проблемы встречаются у людей, но ни на одном форуме решения не нашел. Дело не в этом компоненте, скорее всего, а в багах самого MODX. Куда не зайду - у людей вечно что-то не работает, и никто не знает в чем проблема. Я уже год с этим MODX парюсь, и так и не смог сделать полноценный сайт с нужным функционалом. Уже просто руки опускаются.
Аноним
Аноним

Может попробовать другой хостинг или развернуть это дело у себя на компьютере.

Аноним
Аноним

Здравствуйте, но если только на TV полях. Одно TV использовать для хранения результата, а другое - для IP-адресов (для защиты от накрутки). Или нужно как-то по другому?

Аноним
Аноним
Вы знаете, было бы здорово и так. Главное там не будут плодиться ссылки, как в star rating? типа когда каждая звездочка идет как ссылка.

Кстати, Александр, скажите почему у ваших постов нету рейтинга?
Аноним
Аноним

Не сделал, потому что не было подходящего дополнения. Все, которые были — не подходили.

Всё-таки решил реализовать это в виде компонента. Загрузить его можно пока отсюда. Исходные коды на GitHub. Проект SimpleRating.

Принцип работы: добавить в шаблон или чанк вызов сниппета getSimpleRating:

[[!getSimpleRating]]
Защита от спама осуществляется на основе IP адресов. Немного попозже опубликую статью по этому компоненту.
Аноним
Аноним

Александр спасибо, прям то что нужно, очень хорошо вышло.

Установил, почистил кеш.

Разместил его в шаблоне [[!getSimpleRating]], появился, работает, все очень здорово.

Пробую проголосовать с 5-ти разных точек, у всех разные IP - не дает возможности голосовать. Вот я один раз как проголосовал, он отметил звездочки и проставил рейтиг и 1 голос. Все, с других мест\заходов он уже голосовать вообще не дает.

И еще один момент. Александр, скажите пожалуйста, правильно ли я понимаю. Я хочу отключить подстановку js и css файлов. Для этого я просто в сниппете getSimpleRating просто удаляю 2-ве начальные строчки и прописываю руками их в шаблоне.

Аноним
Аноним

Он проверяет по внешнему IP-адресу. Узнать внешний IP можно, например, на 2ip.ru.

Проверить работоспособность дополнения можно очень просто следующим способом:

1) Открыть базу данных, например, с помощью phpmyadmin.

2) Найти в базе таблицу префикс_simple_rating, открыть её содержимое.

3) Найти в таблице строку соответствующую определенному ресурсу (поле resource).

4) Нажать 2 раза на ячейку rating_ips и изменить ip-адрес, например, какую-нибудь одну цифру.

MODX Revolution - Изменение значения поля в базе данных

5) После этого проголосовать ещё раз.

MODX Revolution -Звёздный CSS рейтинг для ресурсов MODX

Аноним
Аноним
Да, код js и css файлов можете вставить в свои файлы или прописать руками в шаблоне.
Аноним
Аноним

Александр, может тогда я что-то не правильно делаю?

У меня несколько точек выхода по Москве и несколько из Европы + мобильный инет тот же. И везде у меня не активно голосование там где уже я проголосовал.

Согласно вашему методу.

Я нашел ресурс, изменил в таблице rating_ips ip-адрес и у меня снова появилось возможность голосовать.

Зашёл через rdp на сервак в Риге, обновил открытую страницу с ресурсом и у меня появилась возможность голосовать (до этого была не активна). Зашёл через локальную машину в Москве, обновил страницу (изначально на ней голосовал) и снова появилась возможность проголосовать.

Далее я проголосовал из Риги, обновил страницу в Москве и снова не могу голосовать. Хотя rating_ips был изменен и при изменении была возможность голосовать и там и там.

Отключил все скрипты, перепробовал jquery - не помогло(

Аноним
Аноним

Немного доработал компонент. Теперь для определения IP-адреса используется родная функция MODX - getClientIp.

Сборка доступна по адресу: yadi.sk/d/lpMLL6zH3LpLib

Попробуйте сейчас, но предварительно удалите все старые записи из таблицы префикс_simple_rating.

Аноним
Аноним

Александр, удалил все записи в таблице префикс_simple_rating.

Сбросил куки, очистил кеш.

Все тоже самое, дает проголосовать только один раз(

Аноним
Аноним

Создайте сниппет getIP:

<?php
$ip = $modx->request->getClientIp();
return $ip['ip'];

Поместите его вызов в шаблон:

Ваш IP: [[!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 с помощью ключа simplerating_ip. Чтобы это сделать, его значение необходимо установить в "Нет".

Ссылка на транспортный пакет: yadi.sk/d/pF116mjT3LwmtR Кроме этого изображение со звёздочками имеет больший размер. Это позволит их отчётливо отображать на смартфонах.
Аноним
Аноним

Компонент для загрузки доступен с основного репозитория MODX. Называется он FiveStarRating.

Аноним
Аноним

Александр, здравствуйте.

Вот прям то что нужно получилось! Спасибо вам за чудесный компонент)