MODX - Звёздный рейтинг для статей сайта

Александр Мальцев
Александр Мальцев
12K
84
MODX - Звёздный рейтинг для статей сайта
Содержание:
  1. Дополнение FiveStarRating
  2. Вывод ресурсов с самым большим рейтингом
  3. Комментарии

В этой статье рассмотрим, как к статьям сайта добавить звёздный рейтинг.

Звёздный рейтинг - это система для оценки материалов сайта (например, статей) с помощью количества звёздочек (обычно от 1 до 5).

Добавление данного функционала в систему CMS MODX Revolution осуществим посредством дополнения FiveStarRating.

Дополнение FiveStarRating

FiveStarRating - это дополнение, добавляющее в систему MODX Revolution элементы, с помощью которых можно осуществить фронтенд оценку ресурсов с помощью звёздочек.

MODX Revolution – Звёздный рейтинг для статей сайта

Установка дополнения FiveStarRating

Дополнение FiveStarRating расположено в репозитории modx.com.

Его установку в систему MODX Revolution можно осуществить на странице "Управление пакетами".

MODX Revolution – Установка дополнения FiveStarRating

Использование дополнения FiveStarRating

Подключение звёздной оценочной системы к ресурсу осуществляется посредством помещения вызова сниппета SimpleRating в шаблон или контент ресурса.

[[!SimpleRating]]

Параметры сниппета SimpleRating:

  • &id - id ресурса, для которого необходимо вывести рейтинг (по умолчанию текущий).
  • &tpl - чанк, содержащий HTML разметку звёздного рейтинга (по умолчанию tplSimpleRating).

Пример вызова сниппета SimpleRating с указанием id ресурса:

[[!SimpleRating?
    &id = `3`
]]

Пример вызова сниппета SimpleRating с указанием имени чанка:

[[!SimpleRating?
    &tpl = `tplSimpleRating1`
]]

Сниппет SimpleRating выполняет следующие действия:

  • регистрирует нужные стили и скрипты на фронтенде;
  • получает рейтинг текущего или указанного ресурса и выводит его на страницу;
  • устанавливает рейтинг активным или нет, в зависимости от того оценил уже этот ресурс пользователь или нет.

Отправка оценки осуществляется через ajax. Обработку ajax-запроса на сервере выполняет файл action.php. Данный файл проверяет возможность оценки ресурса данным пользователем, выполняет установку рейтинга (запись необходимой информации в базу данных) и возвращает результат. После получения результата от action.php сценарий JavaScript отображает его на странице.

Защита от накрутки оценки осуществляется посредством LocalStorage и IP адреса.

При необходимости защиту по IP адресу можно отключить. Осуществляется это посредством установки системному параметру simplerating_ip значения "Нет".

MODX Revolution – Отключение защиты по IP адресу

Вывод ресурсов с самым большим рейтингом

В качестве заключения рассмотрим, как можно вывести на страницу 10 ресурсов с самым высоким рейтингом. Для выполнения этой задачи воспользуемся сниппетом pdoResources из пакета pdoTools.

[[!pdoResources?
    &loadModels=`simplerating`
    &parents=`0`
    &innerJoin=`{
        "SimpleRating": {
            "class":"SimpleRating",
            "on": "modResource.id = SimpleRating.resource"
        }
    }`
    &sortby = `{"SimpleRating.rating_value":"DESC"}`
  	&select=`{
  	  	"modResource":"id,pagetitle",
    		"SimpleRating":"rating_value"
  	}`
  	&tpl=`@INLINE <p>[[+id]]. [[+pagetitle]] - [[+rating_value]]</p>`
]]

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

  1. Zulya
    Zulya
    12.01.2022, 20:53
    Здравствуйте, Александр!
    При наведении курсора мышки на звезду, возможно ли чтобы предыдущие звездочки также приняли зеленый цвет? Сейчас окрашивается только та звезда, на котором стоит курсор мышки.
    1. MarCantas-602
      MarCantas-602
      08.10.2021, 09:09
      Добрый день
      Установил плагин, прописал пути к css и js файлам, они открываются по ссылкам из исходного кода. Только вот при наведении на звёздочки ничего не происходит. Там data-id и width у меня не цепляются prnt.sc/1v9fkuy
      Не могу найти причину почему. Вот пример страницы
      1. Александр Мальцев
        Александр Мальцев
        09.10.2021, 10:09
        Здравствуйте! Скрипт написан на jQuery, проверьте подключен ли перед ним jQuery.
        1. MarCantas-602
          MarCantas-602
          11.10.2021, 08:32
          jQuery у меня прописан также в футере. Дело в том, что рейтинг вызывается в виде сниппета [[!SimpleRating]] непосредственно из контента ресурса, т.е. страницы. А если я вызываю его через чанк [[$SimpleRating]] или тот же сниппет [[!SimpleRating]] в шаблоне статейных страниц, то id ресурса не цепляется
          1. MarCantas-602
            MarCantas-602
            12.10.2021, 12:28
            В общем, заработало у меня через такой сниппет, прописанный в шаблоне статейных страниц:
            [[!SimpleRating?
                               &id = `[[~[[+id]]]]`
                            ]]
      2. Валерия
        Валерия
        22.09.2020, 10:06
        Здравствуйте, Александр!
        Подскажите, пожалуйста, почему нет выводятся звезды? Только текстовое содержимое чанка — prnt.sc/ullesv
        Код был использован по умолчанию:
        [[!SimpleRating?
                    &tpl = `tplSimpleRating`
        ]]
        
        1. Александр Мальцев
          Александр Мальцев
          23.09.2020, 15:16
          Здравствуйте! Проверьте путь к файлу со звездочками (изображению).
          1. Валерия
            Валерия
            23.09.2020, 17:11
            Причина в том, что не подключаются стили к чанку. Путь к стилям во всех файлах указан верно. Но почему-то блоки не видят стили — prnt.sc/umi6f3.
            1. Александр Мальцев
              Александр Мальцев
              26.09.2020, 15:27
              Подключение стилей происходит в сниппете SimpleRating:
              <?php
              $modx->regClientCSS(MODX_ASSETS_URL . 'components/simplerating/css/web/default.css');
              $modx->regClientScript(MODX_ASSETS_URL . 'components/simplerating/js/web/default.js');
              ...
              
              Проверьте, где у вас на сервере находятся эти файлы. После этого откройте страницу в браузере и перейдите в консоль. Если браузер их не нашёл, то он это выведет в неё. В сообщениях будут указаны пути к ним. Далее нужно их сравнить. Если они не совпадают, то ошибка кроется в них. А если нет, то нужно разбираться дальше. Можно также ещё попробовать очистить кэш.
              1. Валерия
                Валерия
                28.09.2020, 11:31
                Путь верный, файлы доступны по ссылкам. В консоли нет ошибок касаемо этих стилей.
                Но в источниках нет папки сниппета simplerating.
                Вот ссылка на сайт, может так Вы сможете мне помочь.
                1. Александр Мальцев
                  Александр Мальцев
                  28.09.2020, 14:37
                  Да, они не подхватываются. Подключите их на страницу самостоятельно:
                  <link rel="stylesheet" href="/assets/components/simplerating/css/web/default.css">
                  <script src="/assets/components/simplerating/js/web/default.js"></script>
                  
                  Вы используете MinifyX, может из-за него такие проблемы.
                  1. Валерия
                    Валерия
                    28.09.2020, 14:56
                    Спасибо, теперь все вышло!
        2. Ruslan
          Ruslan
          28.12.2019, 01:44
          При нажатии ничего не происходит.
          Перестал работать, как выявить причину?
          Я догадываюсь, что это скорее всего что-то с обработчиком action.php
          Посмотреть на сайте
          1. Ruslan
            Ruslan
            29.12.2019, 06:23
            Проблему решил
            1. Александр Мальцев
              Александр Мальцев
              29.12.2019, 13:37
              Отлично!
          2. Ruslan
            Ruslan
            28.12.2019, 01:43
            При нажатии ничего не происходит.
            Перестал работать, как выявить причину?
            Я догадываюсь, что это скорее всего что-то с обработчиком action.php
            1. Ruslan
              Ruslan
              28.12.2019, 01:16
              Здравствуйте.
              Перестал работать, при нажатии ничего не происходит.
              Как выявить причину и с чем это может быть связано?
              Посмотреть на сайте
              1. Евгений Николаевич Мястовский
                Евгений Николаевич Мястовский
                02.12.2019, 20:52
                Александр, подскажите, как кастомизировать звёзды? Сделать меньше, поменять цвет и т.д. Нужно что бы они были примерно как дефолтные-золотистые. Приобрёл goodstar компонент, но что то он не хочет работать корректно.
                1. Александр Мальцев
                  Александр Мальцев
                  03.12.2019, 02:00
                  Сейчас, только правкой изображения, CSS и возможно других файлов.
                  В планах улучшить этот компонент, в частности сделать звёзды в формате svg. После этого операции по внешнему оформлению звёзд можно будет очень просто выполнять с помощью CSS.
                2. Mish
                  Mish
                  25.10.2019, 20:20
                  Доброго. Скажите пожайлуста как сделать рейтинг из 10 звезд?
                  1. Александр Мальцев
                    Александр Мальцев
                    27.10.2019, 14:17
                    Привет! Для этого нужно произвести изменения в 5 местах.
                    Инструкция как сделать 10 звездочек вместо 5:
                    1. Сделать спрайт на 10 звёздочек аналогично тому, как это выполнено в файле «\assets\components\simplerating\stars.png». Файл с 10 звездочками сохранить, например, с именем «stars10.png».
                    В результате ширина изображения stars10.png теперь равняется 260px.
                    2. В файле «\assets\components\simplerating\js\web\default.js» найти строчку:
                    var width = 130 * ratingValue / 5;
                    Эту строчку заменить на:
                    var width = 260 * ratingValue / 10;
                    3. В файле «\assets\components\simplerating\css\web\default.css» нужно во вех местах stars.png заменить на stars10.png и 130px на 260px.
                    После этого добавить дополнительно ещё следующие стили:
                    .rating__star_6 {
                        left: 130px;
                    }
                    .rating__star_7 {
                        left: 156px;
                    }
                    .rating__star_8 {
                        left: 182px;
                    }
                    .rating__star_9 {
                        left: 208px;
                    }
                    .rating__star_10 {
                        left: 234px;
                    }
                    4. Код чанка tplSimpleRating заменить на следующий:
                    <div class="rating[[+rating_active]]">
                        <div class="rating__best">
                            <div class="rating__current" data-id="[[+id]]" style="display: block; width: [[+rating_width]]px;"></div>
                            <div class="rating__star rating__star_10" data-title="10"></div>
                            <div class="rating__star rating__star_9" data-title="9"></div>
                            <div class="rating__star rating__star_8" data-title="8"></div>
                            <div class="rating__star rating__star_7" data-title="7"></div>
                            <div class="rating__star rating__star_6" data-title="6"></div>
                            <div class="rating__star rating__star_5" data-title="5"></div>
                            <div class="rating__star rating__star_4" data-title="4"></div>
                            <div class="rating__star rating__star_3" data-title="3"></div>
                            <div class="rating__star rating__star_2" data-title="2"></div>
                            <div class="rating__star rating__star_1" data-title="1"></div>
                        </div>
                    </div>
                    <div style="font-size:10px; color: #999; padding-top: 3px; padding-bottom: 3px;">
                        Рейтинг: <span class="rating-value">[[+rating_value]]</span>/10 - <span class="rating-count">[[+rating_count]]</span>
                        голосов
                    </div>
                    5. В сниппете SimpleRating выполнить 2 измнения.
                    5.1. Найти эту строчку:
                    $width = 130 * $rating_value / 5;
                    Заменить её на следующую:
                    $width = 260 * $rating_value / 10;
                    5.2. Найти эту строчку
                    'rating_best' => 5,
                    Заменить в ней цифру 5 на 10:
                    'rating_best' => 10,

                    1. Mish
                      Mish
                      27.10.2019, 22:10
                      Вроде как работает. Спасибо! Вот только выставил оценку 10, а вывелось ток 9.9.

                      А еще выводит ли моя оценка? Поле чтоб показывало мою оценку к материалу.

                      P.S. кому в лом рисовать 10 звездочек вот: ibb.co/YDyyxXC
                      1. Александр Мальцев
                        Александр Мальцев
                        28.10.2019, 13:55
                        В текущей версии нет учета оценок, оставленных авторизированными пользователями.
                        1. Александр Мальцев
                          Александр Мальцев
                          28.10.2019, 13:49
                          Да, там размер числа не позволяет это выполнить.
                          Для этого нужно выполнить следующие шаги:
                          1. В базе данных найти таблицу simple_rating. Для поля rating_value установить Длина/значение — 3,1.
                          2. Открыть файл «\core\components\simplerating\model\schema\simplerating.mysql.schema.xml» и в нём тоже поменять точность на 3,1:
                          <field key="rating_value" dbtype="decimal" precision="3,1" phptype="float" null="false" index="index" />
                          3. Скачать файл «https://raw.githubusercontent.com/itchief/modx_utils/master/parse_schema.php»
                          4. Открыть его и изменить в нём имя пакета:
                          $package_name = 'simplerating';
                          5. Сохранить скрипт parse_schema.php и поместить его в корень проекта.
                          6. Выполнить данный файл.
                    2. Андрей
                      Андрей
                      12.10.2019, 23:10
                      Здравствуйте, Александр!
                      Скажите пожалуйста, как я могу кастомизировать звёзды? Хотелось бы вместо png поставить svg звёзды.
                      Заранее благодарю за ответ
                      1. Александр Мальцев
                        Александр Мальцев
                        13.10.2019, 10:40
                        Привет!
                        В компоненте это реализовано через спрайт, и, следовательно, так просто это изменить нельзя. Сначала нужно хорошее решение для вывода звёздного рейтинга через SVG? Например, как с помощью SVG звездочек отобразить рейтинг 4.3?
                        1. Андрей
                          Андрей
                          13.10.2019, 11:23
                          Александр, еще один вопрос возник, касаемо вывода ресурсов с рейтингом.
                          Сейчас по Вашей формуле в pdoPage выводит ресурсы по популярности.
                          Но в случае, если у ресурса еще не было голосов, еще нет в списке. Как можно поправить данный момент?
                          1. Александр Мальцев
                            Александр Мальцев
                            13.10.2019, 13:51
                            Заменить &innerJoin на &leftJoin.
                          2. Андрей
                            Андрей
                            13.10.2019, 10:57
                            Точно, в целом с точки зрения реализации верстки это весьма проблематично.
                            Ладно, тогда вопрос другой, как тогда убрать цифры в спрайте так, чтобы ничего не съехало?
                            1. Александр Мальцев
                              Александр Мальцев
                              13.10.2019, 13:59
                              Как с помощью SVG это реализовать идея появилась, тут нужно просто использовать наложение изображений.
                              Чтобы убать цифры необходимо просто изменить стили, а именно CSS-свойство height:
                              .rating {
                                height: 25px;
                              }
                              .rating__best {
                                height: 25px;
                              }
                              .rating__current {
                                height: 25px;
                              }
                              .rating__star {
                                height: 25px;
                              }
                              
                        2. Сергей
                          Сергей
                          10.10.2019, 10:44
                          Добрый день. Как можно сделать 10 звездочек вместо 5 и можно ли? Почему-то не реагирует вообще на параметр tpl — прописал там 10 все равно 5 выводит, прописал 4 — тоже 5 выводит
                          1. Сергей
                            Сергей
                            10.10.2019, 10:57
                            Кажется стал разбираться, потом отпишу решение
                            1. Александр Мальцев
                              Александр Мальцев
                              10.10.2019, 15:48
                              Хорошо
                              1. Сергей
                                Сергей
                                10.10.2019, 16:34
                                Александр, скажите есть возможность из коробки только вывести рейтинг без возможности голосования?
                                1. Александр Мальцев
                                  Александр Мальцев
                                  11.10.2019, 14:13
                                  Конечно можно. Делаете копию чанка tplSimpleRating, удаляете в нём [[+rating_active]] и указываете его сниппету SimpleRating.
                                  [[!SimpleRating?
                                    &tpl = `mytplSimpleRating`
                                  ]]
                                  
                          2. Максим
                            Максим
                            28.08.2019, 02:02
                            Приветствую Александр,
                            Спасибо за проделанную работу и вопрос: Я использую популярную МОДХ экстра Babel для создания мультиязычного вебсайта. Каждая языковая версия «живет» на отдельном контексте и имеет свой id. То есть языковые версии представляют собой разные, хотя и связанные ресурсы. Можно ли сделать так, чтобы рейтинг не дробился между английской и русской страницами сайта?
                            1. Максим
                              Максим
                              29.08.2019, 12:06
                              Ответ подсказали, делюсь если вдруг кому-то будет интересно.
                              У моего сайта два языка (русский и английский). На русском рейтинг выводится [[!SimpleRating]].
                              На англйском [[!SimpleRating? &id=`[[BabelTranslation? &contextKey=`web`]]`]]
                              где BabelTranslation? &contextKey=`web` это id русского ресурса, с которым залинкован данный английский ресурс.
                            2. flintotake
                              flintotake
                              18.08.2019, 00:23
                              Доброго времени суток. Подскажите, есть ли возможность в выводе популярных ресурсов через pdoResources результаты вывода сделать ссылками на сами ресурсы?
                              Спасибо.
                              1. Александр Мальцев
                                Александр Мальцев
                                26.08.2019, 14:01
                                Доброго. Выберите uri ресурса, оберните с помощью элемента a нужные элементы и укажите выбранное поле в качестве значения href.
                                1. flintotake
                                  flintotake
                                  30.08.2019, 22:37
                                  можно пример?
                                  1. Александр Мальцев
                                    Александр Мальцев
                                    04.09.2019, 14:43
                                    Например, так:
                                    [[!pdoResources?
                                      &loadModels = `simplerating`
                                      &parents = `0`
                                      &leftJoin = `{
                                        "SimpleRating": {
                                          "class":"SimpleRating",
                                          "on": "modResource.id = SimpleRating.resource"
                                        }
                                      }`
                                      &sortby = `{"SimpleRating.rating_value":"DESC"}`
                                        &select = `{
                                          "modResource":"id,pagetitle,uri",
                                          "SimpleRating":"rating_value"
                                        }`
                                      &tpl= `@INLINE <li><a href="[[+uri]]">[[+id]]. [[+pagetitle]] - [[+rating_value]]</a></li>`
                                      &tplWrapper = `@INLINE <ul>[[+output]]</ul>`
                                    ]]
                                    
                              2. greeg
                                greeg
                                17.05.2019, 00:32
                                добрый день у меня перестал работать FiveStar Rating после переноса каталога core на уровень выше, не зашитует голоса. где надо поправить? зарание спасибо

                                1. Александр Мальцев
                                  Александр Мальцев
                                  17.05.2019, 15:46
                                  Добрый! Не нужно ничего поправлять. Очистите кэш MODX, браузера. Попробуйте ещё раз.
                                2. alex G
                                  alex G
                                  10.12.2018, 18:32
                                  Здравствуйте, возникла необходимость скрытия блока после голосования (сохранить оценку текстовую а звёздочки скрыть), и запустить js действие, подскажите пожалуйста как правильно это реализовать?
                                  1. Александр Мальцев
                                    Александр Мальцев
                                    11.12.2018, 14:18
                                    Здравствуйте!
                                    Для этого в CSS добавьте:
                                    .rating {
                                      display: none;
                                    }
                                    .rating_show {
                                      display: block;
                                    }
                                    
                                    В JavaScript файле \assets\components\simplerating\js\web\default.js измените следующее:
                                    а)
                                    // этот код:
                                    var removeRatingActive = function () {
                                      if (output) {
                                        $('.rating_active [data-id]').each(function () {
                                          var id = $(this).attr('data-id');
                                          if (output.indexOf(id) >= 0) {
                                            $(this).closest('.rating').removeClass('rating_active');
                                          }
                                        });
                                      }
                                    };
                                    // на этот:
                                    var removeRatingActive = function () {
                                      if (output) {
                                        $('.rating_active [data-id]').each(function () {
                                          var id = $(this).attr('data-id');
                                          if (output.indexOf(id) >= 0) {
                                            $(this).closest('.rating').removeClass('rating_active');
                                          } else {
                                            $(this).closest('.rating').addClass('rating_show'); 
                                          }
                                        });
                                      }
                                    };
                                    
                                    b)
                                    // этот фрагмент:
                                    if (!$.isEmptyObject(data)) {
                                      current.removeClass('rating_active');
                                    // на этот:
                                    if (!$.isEmptyObject(data)) {
                                      current.removeClass('rating_active rating_show');
                                    
                                  2. Сеокотов
                                    Сеокотов
                                    01.11.2018, 16:15
                                    А реально сделать так чтобы только в комментарии через tickets была возможность ставить оценку?
                                    1. Александр Мальцев
                                      Александр Мальцев
                                      04.11.2018, 04:38
                                      Сделать то всё возможно, но придётся много переделывать.
                                    2. Константин
                                      Константин
                                      06.09.2018, 12:22
                                      Добрый день! Александр, может Вы мне поможете. При переносе сайта на новый хостинг. перестало правильно работать голосование. А именно, при клике на звездочку ничего не происходит. Не видно сразу, что я оставил оценку, хотя данные в базу заносятся и при обновлении странички оставленную мной оценку я вижу. Еще я могу проголосовать бесконечное количество раз. И все оценки засчитываются и средний рейтинг выводится.
                                      В консоли браузера следующие ошибки:
                                      POST https://.../assets/components/simplerating/action.php 500 (Internal Server Error)
                                      POST https://.../assets/components/simplerating/action.php 502 (Bad Gateway)
                                      
                                      В админке, в журнале ошибок ничего нет.

                                      Может ли это связано с тем, что сайт стал работать на https? на старом хостинге, когда была разработка, сайт работал на http. Или это от хостинга зависит?

                                      Спасибо!
                                      1. Александр Мальцев
                                        Александр Мальцев
                                        06.09.2018, 13:53
                                        Добрый!
                                        Необходимо проверить, действительно ли такой путь до файла action.php.
                                        Если это так, то проверить можно ли из клиента (браузера) обратиться к нему. Например, введя URL в адресную строку браузера:
                                        https://.../action.php
                                        1. Константин
                                          Константин
                                          06.09.2018, 20:05
                                          Обратился в техподдержку хостинга. Все решили. В чем проблема была я не уточнял. Спасибо за отклик.
                                        2. Константин
                                          Константин
                                          06.09.2018, 12:39
                                          Еще в этом файле
                                          https://.../assets/components/simplerating/js/web/default.js
                                          Ругается на 42 строку:
                                          $.post('/assets/components/simplerating/action.php', {'action': 'setRating', 'id': id, 'title': title})
                                        3. Антон
                                          Антон
                                          14.08.2018, 20:12
                                          Александр добрый день подскажите а где можно почистить рейтинг (обнулить например) или посмотреть. Если есть такая возможность)
                                          1. Александр Мальцев
                                            Александр Мальцев
                                            19.08.2018, 07:48
                                            Добрый! Встроенной такой возможности нет. Можно попробывать это реализовать по этой инструкции.
                                          2. Сеокотов
                                            Сеокотов
                                            12.07.2018, 14:28
                                            Установил сниппет
                                            звезды работают
                                            при попытке вывода ресурсов с лучшими оценками возникли трудности

                                            [[!pdoResources?
                                                &loadModels=`simplerating`
                                                &parents=`0`
                                                &innerJoin=`{
                                                    "SimpleRating": {
                                                        "class":"SimpleRating",
                                                        "on": "modResource.id = SimpleRating.resource"
                                                    }
                                                }`
                                                &sortby = `{"SimpleRating.rating_value":"DESC"}`
                                              	&select=`{
                                              	  	"modResource":"id,pagetitle",
                                                		"SimpleRating":"rating_value"
                                              	}`
                                              	&tpl=`item_prev`
                                            ]]
                                            поставил свой шаблон item_prev
                                            но почему то не выводит [[+alias]]

                                            1. Александр Мальцев
                                              Александр Мальцев
                                              12.07.2018, 16:42
                                              Необходимо в &select перечислить поля, которые нужно получить. Ну, или использовать *, чтобы получить все поля.
                                              &select=`{
                                                  "modResource":"id,pagetitle,alias",
                                              
                                              1. Сеокотов
                                                Сеокотов
                                                12.07.2018, 16:54
                                                о, супер, спасибо!
                                                а подскажите еще такой момент, как вывести на превьюшке к примеру просто звездочку с текущей оценкой, то есть тот статус который на данный момент имеет страница
                                                либо весь ряд звезд?
                                                1. Александр Мальцев
                                                  Александр Мальцев
                                                  12.07.2018, 17:47
                                                  Можно, в данном случае, в чанк item_prev поместить вызов сниппета SimpleRating:
                                                  [[!SimpleRating?
                                                      &id=`[[+id]]`
                                                  ]]
                                                  
                                                  Второй вариант — это использовать изображение и плейсхолдер rating_value. Например, так:
                                                  [[+rating_value]] <svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 576 512" height="16"><path fill="currentColor" d="M259.3 17.8L194 150.2 47.9 171.5c-26.2 3.8-36.7 36.1-17.7 54.6l105.7 103-25 145.5c-4.5 26.3 23.2 46 46.4 33.7L288 439.6l130.7 68.7c23.2 12.2 50.9-7.4 46.4-33.7l-25-145.5 105.7-103c19-18.5 8.5-50.8-17.7-54.6L382 150.2 316.7 17.8c-11.7-23.6-45.6-23.9-57.4 0z"></path></svg> 
                                                  
                                            2. Константин
                                              Константин
                                              09.07.2018, 22:08
                                              Добрый вечер! А как переписать вывод рейтинговых ресурсов, но только на Fenom и используя Tickets? Пробую сам, сортирует вроде как нужно, но выводятся только ресурсы, которым поставили оценку, остальные пропадают. Что-то где-то не учел, а что, не могу понять.
                                              1. Александр Мальцев
                                                Александр Мальцев
                                                10.07.2018, 14:02
                                                Добрый! &innerJoin замените на &leftJoin.
                                                1. Константин
                                                  Константин
                                                  13.07.2018, 17:16
                                                  Спасибо! Все работает! Не могли бы Вы еще помочь в одной проблеме. Мне, кроме сортировки по рейтингу понадобилась возможность закреплять некоторые записи в начале списка. Для это я создал доп. поле org_sticky_top (Закрепить в начале списка), которое принимает значения 1 или 0. Т.е, если отметить в ресурсе галочку в поле org_sticky_top, предполагается, что этот ресурс должен размещаться сверху. Но, кроме сортировки по полю org_sticky_top, должна корректно работать сортировка по рейтингу. Я создал сниппет:
                                                  {'!pdoPage' | snippet: [
                                                  'leftJoin' => '{
                                                  	"SimpleRating":{
                                                  	"class":"SimpleRating",
                                                  	"on":"Ticket.id = SimpleRating.resource"
                                                  }
                                                  }',
                                                  'select' => '{
                                                  	"Ticket":"id,pagetitle",
                                                  	"SimpleRating":"rating_value",
                                                  }',
                                                  'sortby' => [
                                                  	"org_sticky_top" => "desc",
                                                  	"SimpleRating.rating_value" => "desc",
                                                  	"id" => "desc"
                                                  ],
                                                  'loadModels'=>'simplerating',
                                                  'element'=>'getTickets',
                                                  'hideContainers' => 1,
                                                  'parents '=> $_modx->resource.id,
                                                  'limit' => 10,
                                                  'depth' => 1,
                                                  'ajaxMode' => 'default',
                                                  'prepareTVs' =>  'img',
                                                  'tpl' => 'oneOrgTpl',
                                                  'where' => ['class_key' => 'Ticket'],
                                                  'includeTVs' => 'img,org-work-time,addresses,org_sticky_top',
                                                  ]}
                                                  
                                                  Здесь первой идет сортировка по org_sticky_top, потом по рейтингу и затем по id ресурса. И тут у меня пошли косяки. Сортировка по org_sticky_top работает норм. т.е. все отмеченные галочкой ресурсы закрепляются вначале и даже сортировка по рейтингу среди них происходит отлично. Но в остальных ресурсах происходит хаос. Сортировка по рейтингу не работает. Материал с низшим рейтингом может стоять выше материала с высшим рейтингом.

                                                  Не могли бы Вы подсказать где я мог накосячить?
                                                  1. Александр Мальцев
                                                    Александр Мальцев
                                                    14.07.2018, 05:44
                                                    Попробуй так:
                                                    'sortbyTV' => 'org_sticky_top',
                                                    'sortbyTVType' => 'integer',
                                                    'sortby' => '{
                                                      "SimpleRating.rating_value": "desc"
                                                    }',
                                                    
                                                    1. Константин
                                                      Константин
                                                      16.07.2018, 16:22
                                                      Добрый день! Решил я свою проблему. Разобрался сам. Она заключалась в том, что я в доп. поле org_sticky_top указал значение по-умолчанию равным 0. Не нужно было там вообще что-то указывать. Фактически, у ресурса поле org_sticky_top могло принимать три значения (1, 0 и пустое значение) а не два (1 и пустое значение). Соответственно и сортировка сразу шла по 1, 0 и пустому значению. Отсюда и неправильная последовательность в результатах сортировки.

                                                      А Вам огромное спасибо, что находите время, чтобы помочь таким как я!
                                                      1. Александр Мальцев
                                                        Александр Мальцев
                                                        16.07.2018, 16:34
                                                        Отлично!
                                                      2. Константин
                                                        Константин
                                                        15.07.2018, 00:47
                                                        Спасибо, но к сожалению, изменений не произошло. Закрепленные материалы наверху, как и нужно, а дальше сортировка не работает. Попробую спросить на modx.pro. Может там кто подобное реализовывал.
                                                2. Дмитрий
                                                  Дмитрий
                                                  01.12.2017, 22:33
                                                  Добрый вечер. Подскажите пожалуйста как вывести рейтинг в превью на странице вывода нескольких элементов? Чтобы отображал у каждого свой
                                                  1. Дмитрий
                                                    Дмитрий
                                                    03.12.2017, 10:37
                                                    Решение нашел
                                                  2. ilyaib
                                                    ilyaib
                                                    17.11.2017, 20:52
                                                    А с fenome не дружит? пытаюсь заменить в чанке [[+id]] на {$id} не выводит
                                                    1. Александр Мальцев
                                                      Александр Мальцев
                                                      18.11.2017, 17:40
                                                      Для поддержки Fenom откройте сниппет SimpleRating и добавьте в него строчку:
                                                      <?php
                                                      $pdo = $modx->getService('pdoTools');
                                                      ...
                                                      
                                                      После этого в конструкции измените $modx на $pdo:
                                                      $output = $pdo->getChunk($tpl_option, array(
                                                          'id' => $id,
                                                          'rating_best' => 5,
                                                          'rating_value' => $rating_value,
                                                          'rating_count' => $rating_count,
                                                          'rating_active' => $rating_active_class,
                                                          'rating_width' => str_replace(',', '.', $width)
                                                      ));
                                                      
                                                    2. kalisto
                                                      kalisto
                                                      25.10.2017, 23:50
                                                      Здравствуйте Александр!
                                                      Почему-то идет ошибка.
                                                      Как исправить?
                                                      1. kalisto
                                                        kalisto
                                                        26.10.2017, 00:11
                                                        Ой прошу прощения убрала расширение .html
                                                        Выдает ошибку в 42 строке (файл default.js):
                                                        $.post('/assets/components/simplerating/action.php', {'action': 'setRating', 'id': id, 'title': title})
                                                        Как исправить? Или рейтинг не работает по другой причине?
                                                        1. Александр Мальцев
                                                          Александр Мальцев
                                                          26.10.2017, 11:24
                                                          Здравствуйте. Необходимо подключить библиотеку jQuery.
                                                          1. kalisto
                                                            kalisto
                                                            26.10.2017, 12:03
                                                            Спасибо за ответ. Я подключаю биб-ку в проекте (скачала, concat — в итоге scripts.min.js) —
                                                            <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" ></script>
                                                                <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js"></script>
                                                                <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" ></script>
                                                            Или тут jquery подключить дополнительно еще нужно? А какой?
                                                            Попробую jquery-migrate-1.4.1.min.js подключить.
                                                            1. Александр Мальцев
                                                              Александр Мальцев
                                                              26.10.2017, 13:39
                                                              Нужно обычный jQuery, не slim. Slim — это урезанная версия jQuery без AJAX функций и прочих «вкусностей». migrate — он предназначен для поддержки устаревших функций, которые не стало в 3 версии jQuery. Данный компонент не использует устаревшие функции jQuery, его можете не подключать.
                                                              В вашем коде необходимо 1 строчку заменить на следующую:
                                                              <script src="https://code.jquery.com/jquery-3.2.1.min.js"></script>
                                                      2. Ми
                                                        Ми
                                                        14.10.2017, 19:35
                                                        Добрый вечер!
                                                        возникла проблема что не выводит список согласно количества голосов

                                                        то есть просто если у ресурса есть рейтинг то он выводиться, но не соблюдается требования что первый это самый популярный и с самым большим числом голосов

                                                        вот вывод
                                                        [[!pdoResources? 
                                                                  &loadModels=`simplerating`
                                                                  &parents=`4`
                                                                  &depth=`3`
                                                                  &includeContent=`1`
                                                                  &limit=`4` 
                                                                  &innerJoin=`{
                                                                    "SimpleRating": {
                                                                    "class":"SimpleRating",
                                                                    "on": "modResource.id = SimpleRating.resource"}
                                                                    }`
                                                                  &sortby = `{"SimpleRating.rating_value":"ASC"}`
                                                          	      &select=`{
                                                          	  	    "modResource":"id,pagetitle",
                                                            		"SimpleRating":"rating_value"
                                                          	        }`
                                                                  &tpl=`tpl.mejores.ofertas`
                                                                  &includeTVs=`img,subject,precio,moneda,provincia,ciudad` 
                                                                ]]
                                                        1. Александр Мальцев
                                                          Александр Мальцев
                                                          16.10.2017, 16:49
                                                          Добрый вечер!
                                                          Если необходимо вывести ресурсы у которых нет рейтинга, то необходимо использовать параметр leftJoin.
                                                          Если необходимо отсортировать сначала по значению рйтинга, а потом по количеству голосов, то так:
                                                          &sortby = `{"SimpleRating.rating_value":"DESC","SimpleRating.rating_count":"DESC"}`
                                                          &select=`{
                                                              "modResource":"*",
                                                              "SimpleRating":"rating_value, rating_count"
                                                          }`
                                                          
                                                        2. Даниил
                                                          Даниил
                                                          10.10.2017, 21:53
                                                          А есть ли возможность сохранять значение рейтинга в TV?
                                                          1. Александр Мальцев
                                                            Александр Мальцев
                                                            16.10.2017, 17:26
                                                            Нет, такой возможности нет. Дополнение FiveStarRating сохраняет информацию в таблицу simple_rating. Если для этого использовать TV поля, то для этого потребуется заводить не одно, а несколько TV полей. Если же всю информацию сохранять в одно TV, то с ней будет очень затруднительно работать.
                                                            Если вам необходимо обеспечить работу с полями FiveStarRating из админки, то, как это сделать можете взять из этой инструкции.
                                                            1. Илья
                                                              Илья
                                                              20.07.2018, 12:49
                                                              Доброго всем дня!
                                                              Такой вопрос. Мне нужно сделать сортировку по 3-м полям:
                                                              1) По популярности — компонент HitsPage
                                                              2) По рейтингу — компонент FiveStarRating
                                                              3) По новизне — publishedon
                                                              Нашёл вот такую простую сортировку modx.ru/novosti-i-stati/article/216
                                                              1) понятно как вывести, там значение записывается в TV
                                                              2) непонятно (https://itchief.ru/lessons/modx-revo/modx-how-to-add-additional-fields-to-the-resource), почитал статью и не понял как это всё соединить.
                                                              3) понятно.

                                                              Помогите разобраться. Или может уже есть какое то обновление и значение рейтинга записывается в TV
                                                              1. Александр Мальцев
                                                                Александр Мальцев
                                                                21.07.2018, 06:10
                                                                Чтобы соединить записи из таблиц используются соединения (leftJoin, innerJoin и др.). Для TV просто уже прописаны некоторые механизмы и когда вы, например, в сниппете используете includeTVs, то эти соединения создаются этим сниппетом автоматически.
                                                                Например, для того чтобы включить в запрос FiveStarRating необходимо:
                                                                [[!pdoResources? 
                                                                  &loadModels=`simplerating`
                                                                  &leftJoin=`{
                                                                    "SimpleRating": {
                                                                      "class":"SimpleRating",
                                                                      "on": "modResource.id = SimpleRating.resource"}
                                                                  }`
                                                                  &select=`{
                                                                    "SimpleRating":"rating_value"
                                                                  }`
                                                                  &sortby' = `{
                                                                    "HitsPage":"DESC",
                                                                    "SimpleRating.rating_value":"DESC",
                                                                    "publishedon":"DESC"
                                                                  }
                                                                  ...
                                                                
                                                                Сортировка указывается с помощью параметра sortby. Как это выполнить по 3-м полям указано в примере.
                                                                У этого компонента значение рейтинга не хранится в TV. Такого обновления не будет, потому что это не улучшит компонент, а наоборот только его ухудшит.
                                                                1. Илья
                                                                  Илья
                                                                  21.07.2018, 13:26
                                                                  Большое спасибо! Всё получилось.
                                                          2. Ivan
                                                            Ivan
                                                            06.09.2017, 09:49
                                                            Александр, благодарю за полезную информацию и ваш труд над сайтом. Подскажите, пожалуйста, можно ли указать id для конкретного рейтинга в списке ресурсов pdoResources? Например:
                                                            [[!SimpleRating?
                                                                    &id=`[[+id]]`
                                                            ]]
                                                            
                                                            1. Александр Мальцев
                                                              Александр Мальцев
                                                              07.09.2017, 15:07
                                                              Новая версия с поддержкой данной возможности отправлена на modx.com. После проверки пакета, он будет доступен через несколько дней для обновления.
                                                              1. Ivan
                                                                Ivan
                                                                07.09.2017, 19:05
                                                                Благодарю за оперативность, Александр!
                                                              2. Александр Мальцев
                                                                Александр Мальцев
                                                                06.09.2017, 17:08
                                                                Спасибо. Пока данной возможности нет. Она появится в следующем релизе.
                                                                Кроме этого защита по COOKIE будет заменена на LocalStorage.
                                                              Войдите, пожалуйста, в аккаунт, чтобы оставить комментарий.