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
Что нового?
В этой версии 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
Комментарии: 16
Это круто!
Еще бы возможность добавлять свои поля и был бы «огонь»! :)
Подумаю, может в следующем релизе.
Вы можете мне навскидку предложить сценарии, в которых потребуются дополнительные поля?
Вы можете мне навскидку предложить сценарии, в которых потребуются дополнительные поля?
В тех же отзывах можно предложить поле со списком, радиокнопками и т.д., для оценки конкретных показателей (да/нет). В вопросах можно будет дорабатывать поля под конкретные нужды (добавлять тему вопроса тем же списком, вписать номер заказа и проч.). Это так, навскидку.
Обновили в магазине.
Спасибо!
Гляньте 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) {
//смысл тот же, только использовать можно в разных таблицах/формах, в отличии от первого случая
}
Спасибо за дельный комментарий!
Мысль сделать это была, просто пока не добрался! Но теперь точно придется сделать)))
Мысль сделать это была, просто пока не добрался! Но теперь точно придется сделать)))
Скажите, а есть возможность отключать рейтинг?
Я хочу использовать компонент в качестве «вопроса-ответа» и в комментариях к товару.
В первом случае рейтинг не нужен, во втором необходим.
Я хочу использовать компонент в качестве «вопроса-ответа» и в комментариях к товару.
В первом случае рейтинг не нужен, во втором необходим.
Добрый день!
На фронтенде вы вольны сделать как вам хочется, т.е. убрать ненужные поля из чанков. Вам нужно будет просто сделать 2 набора разных чанков, один для отзывов, другой для вопросов и ответов.
Так же необходимо указать разные наборы полей allowedFields и requiredFields для вызовов сниппета ecForm, см. документацию docs.modx.pro/components/easycomm/snippets
Посмотрите в видео в самом начале так и сделано: www.youtube.com/watch?v=yXH09MKwxyw
А вот в админке у вас единый набор полей (правда настраиваемый), поэтому если вам нужен рейтинг в отзывах, то и в комментариях он будет, пусть и нулевой. Как скрыть ненужные поля в админке описано здесь docs.modx.pro/components/easycomm/plugins-and-customization
На фронтенде вы вольны сделать как вам хочется, т.е. убрать ненужные поля из чанков. Вам нужно будет просто сделать 2 набора разных чанков, один для отзывов, другой для вопросов и ответов.
Так же необходимо указать разные наборы полей allowedFields и requiredFields для вызовов сниппета ecForm, см. документацию docs.modx.pro/components/easycomm/snippets
Посмотрите в видео в самом начале так и сделано: www.youtube.com/watch?v=yXH09MKwxyw
А вот в админке у вас единый набор полей (правда настраиваемый), поэтому если вам нужен рейтинг в отзывах, то и в комментариях он будет, пусть и нулевой. Как скрыть ненужные поля в админке описано здесь docs.modx.pro/components/easycomm/plugins-and-customization
Было бы неплохо вывести эту функцию в виде параметра (если это возможно)
&rating=`1/0`
Компонент очень хороший!
А есть ли возможность добавить несколько рейтингов? Что-то типа:
Я так понимаю, что через плагины возможно?
Можно ли фильтровать и сортировать через mFilter2?
Я так понимаю, что через плагины возможно?
Можно ли фильтровать и сортировать через mFilter2?
Добрый день!
Из коробки нельзя, с помощью плагинов в принципе можно попробовать, но все равно не будет полноценной поддержки, к примеру сейчас идет проверка на сервере, что оценка в диапазоне 1-5, что бы пользователь лишнего не проставил.
Плюс средняя оценка храниться в thread и ее можно использовать…
В общем много нюансов.
Если есть потребность — можно сделать fork на основе компонента с поддержкой нужного вам количества рейтингов или попробовать реализовать поддержку N количества рейтингов прям из коробки, но пока что у меня на это нет времени.
Из коробки нельзя, с помощью плагинов в принципе можно попробовать, но все равно не будет полноценной поддержки, к примеру сейчас идет проверка на сервере, что оценка в диапазоне 1-5, что бы пользователь лишнего не проставил.
Плюс средняя оценка храниться в thread и ее можно использовать…
В общем много нюансов.
Если есть потребность — можно сделать fork на основе компонента с поддержкой нужного вам количества рейтингов или попробовать реализовать поддержку N количества рейтингов прям из коробки, но пока что у меня на это нет времени.
Спасибо за ответ.
Конечно хотелось бы из коробки.
Вопрос не срочный, возможно и дождусь. А не дождусь, куплю как есть с надеждой на будущее.
В любом случае спасибо за компонент.
Конечно хотелось бы из коробки.
Вопрос не срочный, возможно и дождусь. А не дождусь, куплю как есть с надеждой на будущее.
В любом случае спасибо за компонент.
как средний рейтинг вывести?
*прошу прощения, разобрался — через rating_simple
*прошу прощения, разобрался — через rating_simple
Подкатите как вывести рейтинг только по вильсону, без общего рейтинга?
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.