MODX - Рейтинг для статей

anton
anton
2,9K
24
Содержание:
  1. Комментарии
Александр, здравствуйте.

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

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

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

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

Спасибо.

Комментарии: 24

  1. Евгений
    Евгений
    2017-10-10 01:42:25
    Не работает. Почему — не понятно. Звезды отображаются, походу проблемы с JS ибо при нажатии на звезду ничего н происходит. Помогите, пожалуйста, нубу.
    Есть огромные подозрения что сниппет canonical, ибо уже были проблемы с путями в другом месте.
    Вот логи:
    [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.

  1. Александр Мальцев
    Александр Мальцев
    2017-10-18 15:46:11
    Проект уже давно доступен в официальном репозитории MODX. Попробуйте его загрузить от туда и установить. Называется он FiveStarRating.
  • Евгений
    Евгений
    2017-10-19 15:16:26
    Из репозитория ставил — не работает. В разных браузерах смотрел — не работает.
    [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
  • Александр Мальцев
    Александр Мальцев
    2017-10-19 17:12:10
    Попробуйте очистить кэш сайта. Кроме этого попробуйте открыть станицу в браузере в режиме инкогнито и проверить работу звёздного рейтинга в нём.
  • Евгений
    Евгений
    2017-10-25 11:43:23
    Все выше перечисленное делал — результат 0.
    По ошибкам гуглил — подобніе проблемі встречаются у людей, но ни на одном форуме решения не нашел. Дело не в Вашем компоненте, скорее всего, а в багаг самого MODX. Куда не зайду — у людей вечно что-то не работает, и никто не знает в чем проблема… Я уже год с етим MODX парюсь, и так и не смог сделать полноценный сайт с нужным функционалом… Уже просто руки опускаются
  • Александр Мальцев
    Александр Мальцев
    2017-10-26 11:56:22
    Может попробовать другой хостинг или развернуть это дело у себя на компьютере.
  • Александр Мальцев
    Александр Мальцев
    2017-07-26 07:41:28
    Здравствуйте, но если только на TV полях. Одно TV использовать для хранения результата, а другое — для IP-адресов (для защиты от накрутки). Или нужно как-то по другому?
    1. anton
      anton
      2017-07-27 15:16:11
      Вы знаете, было бы здорово и так. Главное там не будут плодиться ссылки, как в star rating? типа когда каждая звездочка идет как ссылка.

      Кстати, Александр, скажите почему у ваших постов нету рейтинга?
    2. Александр Мальцев
      Александр Мальцев
      2017-08-06 13:12:02
      Не сделал, потому что не было подходящего дополнения. Все, которые были — не подходили.

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

      Принцип работы: добавить в шаблон или чанк вызов сниппета getSimpleRating:
      [[!getSimpleRating]]
      Защита от спама осуществляется на основе IP адресов.

      Немного попозже опубликую статью по этому компоненту.
    3. anton
      anton
      2017-08-08 11:29:43
      Александр спасибо, прям то что нужно, оч хорошо вышло.

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

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

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

      И еще один момент. Александр, скажите пжл, правильно ли я понимаю. Я хочу отключить подстановку js и css файлов. Для этого я просто в сниппете getSimpleRating просто удаляю 2-ве начальные строчки и прописываю руками их в шаблоне.
    4. Александр Мальцев
      Александр Мальцев
      2017-08-08 14:38:07
      Он проверяет по внешнему IP-адресу. Узнать внешний IP можно, например, на 2ip.ru.
      Проверить работоспособность дополнения можно очень просто следующим способом:
      1. Открыть базу данных, например, с помощью phpmyadmin.
      2. Найти в базе таблицу префикс_simple_rating, открыть её содержимое.
      3. Найти в таблице строку соответствующую определенному ресурсу (поле resource).
      4. Нажать 2 раза на ячейку rating_ips и изменить ip адрес, например, какую-нибудь одну цифру.
      MODX Revolution - Изменение значения поля в базе данных
      5. После этого проголосовать ещё раз.
      MODX Revolution -Звёздный CSS рейтинг для ресурсов MODX
    5. Александр Мальцев
      Александр Мальцев
      2017-08-08 14:39:59
      Да, код js и css файлов можете вставить в свои файлы или прописать руками в шаблоне.
    6. anton
      anton
      2017-08-08 16:21:44
      Александр, может тогда я что-то не правильно делаю?

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

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

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

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

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

      Отключил все скрипты, перепробовал jquery — не помогло(
    7. Александр Мальцев
      Александр Мальцев
      2017-08-08 17:34:16
      Немного доработал компонент. Теперь для определения IP-адреса используется родная функция MODX — getClientIp().
      Сборка доступна по адресу: yadi.sk/d/lpMLL6zH3LpLib
      Попробуйте сейчас, но предварительно удалите все старые записи из таблицы префикс_simple_rating.
    8. anton
      anton
      2017-08-08 18:14:45
      Александр, удалил все записи в таблице префикс_simple_rating

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

      Все тоже самое, дает проголосовать только один раз(
    9. Александр Мальцев
      Александр Мальцев
      2017-08-09 16:50:11
      Создайте сниппет getIP:
      <?php
      $ip = $modx->request->getClientIp();
      return $ip['ip'];
      
      Поместите его вызов в шаблон:
      Ваш IP: [[!getIP]]
      
      После этого на странице будет виден ваш ip-адрес, и вы сможете понять, почему так… Куки и кэш тут роли не играют.
    10. anton
      anton
      2017-08-09 17:24:12
      Александр, сделал как вы сказали. У меня со всех мест показывает локальный адрес — 192.168.42.1

      У меня развернут виртуальный сервер (42.2), который находится на windows2012r2 (42.1)
    11. Александр Мальцев
      Александр Мальцев
      2017-08-09 17:40:59
      У вас сервер и клиент локальный, в этом случае внешний айпи не имеет значение и вы всегда будете получать локальный адрес.
    12. anton
      anton
      2017-08-09 18:00:39
      Александр, как же тогда быть?

      Может есть какое то решение для сего? xLike работал корректно вроде, в плане что не один раз голосовалось.
    13. Александр Мальцев
      Александр Мальцев
      2017-08-10 14:42:52
      Это единственный более менее надёжный способ защититься от накрутки при голосовании не авторизированных пользователей.

      Можно, конечно использовать cookie. Но, если они у пользователя отключены, то он сможет проголосовать много раз. Или как вариант он их может чистить перед каждым голосованием. Данный способ тоже некоторые веб-программисты используют. Но он менее надежный, чем по IP. Хотя и по IP можно тоже обойти.

      Вам надо попробовать обратиться к сайту из устройства, которое не находиться в данной локальной сети и посмотреть результат. Если он будет такой же, то необходимо настроить передачу на сервер заголовка, содержащего реальный IP адрес клиента. После этого у вас всё будет работать.

      В дополнении xLike работают 2 режима. Один для авторизированных пользователей. Тут понятно, учёт идёт по id пользователя. Другой, не для авторизированных пользователей. Т.е. у которых, в системе MODX, id равен 0. Второй работает также на основе IP, плюс дополнительно ещё сохраняет session_id. session_id насколько понял, автор, использует для защиты, от повторного голосования, если вдруг у пользователся поменялся IP.

      Единственное в xLike, если вы в авторизованы в бэкенде, а во форнтэнде нет, при голосовании, он считает вас авторизованным, и сохраняет голос как авторизованного пользователя. Если после этого открыть, например, другой браузер, в котором вы не авторизованы в админке, он позволит ещё раз проголосовать, как не авторизированному пользователю, хотя у вас будет тот же IP. Но это скорее особенность, чем ошибка.

      Если необходимо, то могу настроить защиту с помощью COOKIE и убрать по IP.
    14. anton
      anton
      2017-08-10 21:18:24
      Александр, мне кажется это было бы хорошо!

      Вам в самый раз разместить сей компонент на репозитории (платный\бесплатный это уже ваш выбор). Было бы хорошо что был бы у него выбор ip или куки. Почему нет?

      Хорошо что зашел прочитать сию тему, а то хотел уже снимать какой трафик идет на сервачек, дабы потом в nat у 2012r2 возиться…

    15. Александр Мальцев
      Александр Мальцев
      2017-08-13 15:08:51
      Доработал проект. Теперь отключить учёт по IP, можно в системных настройках MODX с помощью ключа simplerating_ip. Чтобы это сделать его значение необходимо установить в «Нет».
      Ссылка на транспортный пакет: yadi.sk/d/pF116mjT3LwmtR

      Кроме этого изображение со звёздочками имеет больший размер. Это позволит их отчётливо отображать на смартфонах.
    16. Александр Мальцев
      Александр Мальцев
      2017-08-16 07:55:32
      Компонент для загрузки доступен с основного репозитория MODX. Называется он FiveStarRating.
    17. anton
      anton
      2017-08-21 12:51:13
      Александр, здравствуйте.

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