Отзывы о товаре - хранение, модерация, средняя оценка
Заводим отзывы с оценками так, чтобы их можно было модерировать, а средняя оценка не считалась заново на каждом показе карточки.
Решение
Заводим хранилище отзывов:
инфоблок «Отзывы» свойство PRODUCT - привязка к элементу каталога свойство RATING - число от 1 до 5 свойство AUTHOR - привязка к пользователю, если он вошёл активность - признак прошедшей модерацииОтзывы держат отдельным инфоблоком со ссылкой на товар. Отдельная сущность даёт привычную правку в административной части, права на модерацию и выборку по привязке одним запросом.
Принимаем отзыв неактивным:
$el = new CIBlockElement();$id = $el->Add([ 'IBLOCK_ID' => $reviewsIblock, 'ACTIVE' => 'N', // до проверки отзыв не виден 'NAME' => 'Отзыв о товаре ' . $productId, 'PREVIEW_TEXT' => $text, 'PROPERTY_VALUES' => ['PRODUCT' => $productId, 'RATING' => $rating],]);Отзыв приходит неактивным и ждёт проверки. Без этого шага в карточке товара через неделю оказывается реклама чужого сайта, и убирать её приходится вручную.
Считаем среднюю оценку заранее:
$rows = CIBlockElement::GetList([], ['IBLOCK_ID' => $reviewsIblock, 'ACTIVE' => 'Y', 'PROPERTY_PRODUCT' => $productId], false, false, ['PROPERTY_RATING']);$sum = $cnt = 0;while ($r = $rows->Fetch()) { $sum += (int)$r['PROPERTY_RATING_VALUE']; $cnt++; }CIBlockElement::SetPropertyValuesEx($productId, false, ['RATING_AVG' => $cnt ? round($sum / $cnt, 1) : '', 'RATING_CNT' => $cnt]);Среднюю оценку считают при появлении отзыва и кладут в свойство товара. Тогда карточка и список каталога берут готовое число, а не обходят все отзывы при каждом показе.
Показываем оценку в списке товаров:
// в выборке каталога просто ещё два свойства'PROPERTY_CODE' => ['RATING_AVG', 'RATING_CNT'],// в шаблоне: звёзды по среднему значению и число отзывов рядомВ списке показывают готовое число, а не пересчёт. Обход отзывов на сорок товаров витрины стоит сорока лишних запросов, и это заметно ровно на самой посещаемой странице.
Отзыв стоит принимать только от того, кто покупал. Проверка по заказам отсекает почти весь поток бессмысленных сообщений и делает оставшиеся полезнее.
Разметку рейтинга для поисковиков ставят по настоящим отзывам. Средняя оценка, нарисованная там, где отзывов нет, однажды приводит к потере всей разметки сайта.
Отрицательные отзывы полезнее удалённых. Карточка с одними пятёрками вызывает меньше доверия, чем честная средняя оценка с ответами магазина.
Отзывы стоит заводить только тогда, когда есть кому их читать и на них отвечать. Заброшенный раздел с тремя отзывами двухлетней давности говорит покупателю о магазине больше, чем их полное отсутствие.
Типичные проблемы
В отзывах появилась чужая реклама.
Отзывы публикуются сразу, без всякой модерации и без всякой проверки их автора. Новый отзыв заводят неактивным и показывают его людям только после его проверки.
Карточка товара стала медленной.
Средняя оценка считается обходом всех отзывов при каждом показе. Её считают при изменении отзывов и хранят готовой в свойстве товара.
Отзывы отвязались от товаров.
Связь сделана по названию товара, а не по его номеру. Названия товаров со временем меняются, а их номера остаются теми же самыми.
В каталоге сорок лишних запросов на страницу.
Оценка считается для каждого отдельного товара в этом списке совершенно отдельно каждый раз. В список каталога отдают уже готовое значение свойства самого этого товара сразу.
Поисковик перестал показывать звёзды.
Разметка рейтинга стоит там, где настоящих отзывов нет. Разметку ставят только по реальным оценкам от настоящих покупателей этого самого магазина.
Частые вопросы
Отдельный инфоблок или встроенные комментарии?
Инфоблок даёт свои свойства, права и модерацию. Комментарии проще, но оценку и модерацию к ним приходится достраивать.
Как пересчитывать оценку при удалении отзыва?
Тем же кодом на событиях изменения и удаления отзыва. Иначе среднее останется от старого набора.
Пускать ли отзывы без регистрации?
Технически можно, но поток мусора вырастает в разы. Проверка по заказам работает лучше любой капчи.
Что делать с отрицательными отзывами?
Отвечать на них публично и не удалять. Идеальный рейтинг доверия не добавляет.
Смежное
- Каталог товаров - оглавление подтемы
- Карточка товара: вывод свойств, картинок и характеристик - где показывают отзывы
- Свойства инфоблока: чтение, запись и фильтрация по значению - как устроена привязка к товару
- Данные от посетителя: экранирование, проверка, сеанс - приём текста от покупателя
- Каталог и продажи - устройство магазина целиком
- Блоги, форумы, опросы и медиабиблиотека - готовые комментарии платформы
- Рейтинги и голоса за материалы: нормированный голос, авторитет, правила - штатное голосование за материалы
- Комментарии и отзывы к контенту: форум как движок, модерация - готовые комментарии на форуме
- Форма добавления элемента с витрины: свойства, модерация - та же схема для объявлений и заявок