Настройка рейтинга и отзывов о продавцах маркетплейса 1С-Битрикс
Система отзывов о продавцах — не то же самое, что отзывы о товарах в стандартном модуле Каталог. Отзыв о продавце привязан к конкретному заказу, может быть оставлен только покупателем, который действительно получил товар, и влияет на видимость продавца в каталоге.
Хранение отзывов и рейтинга
Стандартный компонент blog.post.list / forum для этого не подходит. Нужен HL-инфоблок или кастомная таблица:
Таблица отзывов mp_vendor_reviews:
| Поле | Тип | Описание |
|---|---|---|
| ID | int, AI | |
| VENDOR_ID | int | FK на продавца |
| USER_ID | int | FK на покупателя |
| ORDER_ID | int | FK на заказ/суб-заказ |
| RATING | tinyint | 1–5 |
| TEXT | text | Текст отзыва |
| STATUS | varchar | pending / approved / rejected |
| CREATED_AT | datetime | |
| MODERATED_AT | datetime |
Индекс на (VENDOR_ID, STATUS) — для быстрого подсчёта рейтинга.
Рейтинг продавца хранится в таблице продавцов денормализованно: UF_RATING (float) и UF_RATING_COUNT (int). Обновляется после каждого одобренного отзыва.
Логика: кто и когда может оставить отзыв
Только покупатель, чей суб-заказ перешёл в статус delivered, может оставить отзыв. Проверка при попытке оставить отзыв:
$canReview = MpSubOrderTable::getList([
'filter' => [
'VENDOR_ID' => $vendorId,
'USER_ID' => $userId,
'STATUS' => 'delivered',
'!REVIEW_ID' => false // ещё не оставлял отзыв
]
])->fetch();
Повторный отзыв на того же продавца в рамках одного заказа — запрещён. На другой заказ — разрешён.
Модерация отзывов
Новые отзывы уходят в статус pending. Модератор одобряет или отклоняет через административный интерфейс. При одобрении — пересчёт рейтинга продавца:
$stats = MpVendorReviewTable::getList([
'select' => ['AVG_RATING' => new ExpressionField('AVG_RATING', 'AVG(RATING)'), 'CNT'],
'filter' => ['VENDOR_ID' => $vendorId, 'STATUS' => 'approved']
])->fetch();
VendorTable::update($vendorId, [
'UF_RATING' => round($stats['AVG_RATING'], 2),
'UF_RATING_COUNT' => $stats['CNT']
]);
Отзывы без модерации возможны, но рискованны — спам и фальсификации.
Отображение рейтинга
Рейтинг и отзывы выводятся на странице продавца и на карточках его товаров. Шаблоны компонентов читают UF_RATING из таблицы продавцов — это быстро. Список отзывов — отдельный AJAX-запрос с пагинацией, чтобы не грузить страницу полностью.
Сроки
Хранение отзывов, логика доступа, пересчёт рейтинга, базовая модерация — 1–2 недели. Добавление ответов продавца на отзывы, сортировка по рейтингу в каталоге — дополнительно 3–5 дней.







