easyComm 1.0.4-beta2 - Оценки и Рейтинг

Для компонента easyComm доступно важное обновление (точнее скоро будет доступно, когда пакет опубликуют в магазине).

Что нового?



В этой версии 2 нововведения:

1. Добавлено поле IP адрес к сообщениям, думаю что сильно лишним это не будет, а только наоборот, полезным кому-то.
2. Добавлена Оценка к сообщениям. Про это подробнее ниже.

Отзывы, комментарии это конечно хорошо, но еще лучше, если можно оценить что-либо, например поставив оценку от 1 до 5 или от 1 до 10. При этом «0» означает что пользователь не поставил никакую оценку (а вовсе не то, что это означает «хуже некуда»).

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

Форма добавления сообщения и список сообщений



У каждого сообщения появилось новое поле rating (tinyint), по умолчанию от 1 до 5, но в принципе возможность менять его в большую сторону заложена (для этого потребуется указать новое значение в системной настройке ec_rating_max и немного поменять пару чанков и css файл).

Для того, что бы это симпатично выглядело — небольшая комбинация html + css + js — и вуаля:


«Звездочки» весьма интерактивны: при наведении на них мышкой они показывают новый рейтинг, текст рядом так же меняется.



Можно запретить отправлять форму с непроставленной оценкой путем задания параметра requiredFields сниппета ecForm.

Сообщения (уже отзывы получается?) в списке выглядят так:


Общий рейтинг



Когда у нас есть оценка от каждого пользователя — грех не посчитать общий рейтинг.
Соответственно считается рейтинг отдельно взятой цепочки.
Выбирая по какому алгоритму его считать я решил остановиться на 2-х вариантах, кому как удобнее: среднее арифметическое и Вильсона.

Про первый все понятно: сумму оценок делим на количество голосовавших.

Про второй все сложнее. В общем очень подробная статья habrahabr.ru/company/darudar/blog/143188/, почитайте, если есть минут 15.
Если нет, кратко объясню. При подсчете рейтинга, как среднего всех голосов, есть проблема: 2 голоса с оценкой «5» дадут средний рейтинг «5», а 1000 голосов, из которых 999 — «5», а 1 — «4», дадут рейтинг «4,999», таким образом этот результат будет хуже, что не очень то верно, правда ведь?

Алгоритм Вильсона позволяет это исправить, рейтинг считается с учетом некоего «доверительного уровня», когда мы говорим, что с вероятностью, например, 95% этот рейтинг верный. Про это подробно в статье =)

Чем больше вероятность (т.е. чем точнее результат мы хотим получить), тем больше голосов нужно, а пока голосов мало — рейтинг будет крутиться где-то посередине. Т.е. даже 10 оценок «5» не дадут вам общую «5», а что-нибудь около «3,5».

В общем результат на скриншоте снизу:



Здесь рейтинг рассчитан по 4-м оценкам: 3, 5, 5, 5, можно увидеть, какая разница в рейтинге при использовании обоих алгоритмов.

Кстати, тот самый «доверительный уровень» вынесен в настройки системы, что бы вы смогли его поменять, если будет нужно.

Для отображения рейтинга добавлен новый сниппет ecThreadRating, а сам рейтинг хранится в базе и рассчитывается в момент добавления/удаления/изменения сообщения с оценкой.

Что в админке


В админке добавлены все поля, связанные с Оценками, правда не так симпатично, как на фронтэнде, а просто числами:


У конкретного сообщения администратор может поменять Оценку, общий рейтинг будет перерасчитан.

Если есть вопросы — задавайте, отвечу.

Если компонент заинтересовал — милости прошу: modstore.pro/packages/utilities/easycomm
Наумов Алексей
09 апреля 2015, 13:52
modx.pro
2
4 687
+5
Поблагодарить автора Отправить деньги

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

Wassi Wassinen
09 апреля 2015, 17:14
0
Это круто!
    Wassi Wassinen
    09 апреля 2015, 17:15
    +1
    Еще бы возможность добавлять свои поля и был бы «огонь»! :)
      Наумов Алексей
      10 апреля 2015, 09:06
      0
      Подумаю, может в следующем релизе.

      Вы можете мне навскидку предложить сценарии, в которых потребуются дополнительные поля?
        Wassi Wassinen
        10 апреля 2015, 19:17
        +1
        В тех же отзывах можно предложить поле со списком, радиокнопками и т.д., для оценки конкретных показателей (да/нет). В вопросах можно будет дорабатывать поля под конкретные нужды (добавлять тему вопроса тем же списком, вписать номер заказа и проч.). Это так, навскидку.
      Leonid Krylov
      09 апреля 2015, 17:28
      +1
      Обновили в магазине.
      Сергей Фещуков
      10 апреля 2015, 11:57
      1
      +1
      Гляньте miniShop2.utils и как устроен вывод полей, например, в заказах miniShop2. Это поможет вам сделать в админке красивый рейтинг, если это необходимо. Вкратце:
      rating: {renderer: this._renderRating}
      //или
      rating: {renderer: easyComm.utils.renderRating}
      
      //а после массива
      this._renderRating: function(val, cell, row) {
      	//val - значение поля rating
      	//cell - объект ячейки
      	//row - объект строки, в которой доступны другие поля строки, типа id или средний рейтинг, к примеру
      	return '<img src="'+val+'stars.jpg" />'; //это к примеру
      }
      
      //или в другом файле
      easyComm.utils.renderRating = function(val, cell, row) {
      	//смысл тот же, только использовать можно в разных таблицах/формах, в отличии от первого случая
      }
        Наумов Алексей
        10 апреля 2015, 13:44
        +3
        Спасибо за дельный комментарий!

        Мысль сделать это была, просто пока не добрался! Но теперь точно придется сделать)))
        Илья
        23 апреля 2015, 11:29
        0
        Скажите, а есть возможность отключать рейтинг?
        Я хочу использовать компонент в качестве «вопроса-ответа» и в комментариях к товару.
        В первом случае рейтинг не нужен, во втором необходим.
          Наумов Алексей
          23 апреля 2015, 11:43
          0
          Добрый день!
          На фронтенде вы вольны сделать как вам хочется, т.е. убрать ненужные поля из чанков. Вам нужно будет просто сделать 2 набора разных чанков, один для отзывов, другой для вопросов и ответов.
          Так же необходимо указать разные наборы полей allowedFields и requiredFields для вызовов сниппета ecForm, см. документацию docs.modx.pro/components/easycomm/snippets

          Посмотрите в видео в самом начале так и сделано: www.youtube.com/watch?v=yXH09MKwxyw

          А вот в админке у вас единый набор полей (правда настраиваемый), поэтому если вам нужен рейтинг в отзывах, то и в комментариях он будет, пусть и нулевой. Как скрыть ненужные поля в админке описано здесь docs.modx.pro/components/easycomm/plugins-and-customization
            Илья
            23 апреля 2015, 12:15
            0
            Было бы неплохо вывести эту функцию в виде параметра (если это возможно)
            &rating=`1/0`
            Компонент очень хороший!
          Evgeny Epifanov
          10 сентября 2015, 00:24
          0
          А есть ли возможность добавить несколько рейтингов? Что-то типа:

          Я так понимаю, что через плагины возможно?
          Можно ли фильтровать и сортировать через mFilter2?
            Наумов Алексей
            10 сентября 2015, 08:46
            0
            Добрый день!

            Из коробки нельзя, с помощью плагинов в принципе можно попробовать, но все равно не будет полноценной поддержки, к примеру сейчас идет проверка на сервере, что оценка в диапазоне 1-5, что бы пользователь лишнего не проставил.

            Плюс средняя оценка храниться в thread и ее можно использовать…

            В общем много нюансов.

            Если есть потребность — можно сделать fork на основе компонента с поддержкой нужного вам количества рейтингов или попробовать реализовать поддержку N количества рейтингов прям из коробки, но пока что у меня на это нет времени.
              Evgeny Epifanov
              10 сентября 2015, 09:55
              0
              Спасибо за ответ.
              Конечно хотелось бы из коробки.
              Вопрос не срочный, возможно и дождусь. А не дождусь, куплю как есть с надеждой на будущее.
              В любом случае спасибо за компонент.
            Антон Левиц
            Антон Левиц
            29 октября 2015, 21:25
            0
            как средний рейтинг вывести?
            *прошу прощения, разобрался — через rating_simple
              Vasily
              25 мая 2022, 16:08
              0
              Подкатите как вывести рейтинг только по вильсону, без общего рейтинга?
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                16