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

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

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

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

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

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

Спасибо.

Комментарии ()

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

                                      Кроме этого изображение со звёздочками имеет больший размер. Это позволит их отчётливо отображать на смартфонах.
                                      1. anton
                                        21 августа 2017, 12:51
                                        Александр, здравствуйте.

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