Система відгуків на 1С-Бітрікс: ORM, верифікація, модерація

Відгуки на товари — головний фактор конверсії в інтернет-магазині. Але стандартні рішення Бітрікса (форум, компонент comments) не дають потрібного контролю: немає верифікації покупки, складна модерація, немає перерахунку рейтингу. Ми розробляємо кастомну систему відгуків на ORM D7 — гнучку, швидку і
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Система відгуків на 1С-Бітрікс: ORM, верифікація, модерація
Середній
~1-2 тижні

Наші компетенції:

Часті запитання

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1455
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Розробка веб-сайту для компанії ФІКСПЕР
    1018
  • image_bitrix-bitrix-24-1c_development_of_an_online_appointment_booking_widget_for_a_medical_center_594_0.webp
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    760
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    879
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1162

Відгуки на товари — головний фактор конверсії в інтернет-магазині. Але стандартні рішення Бітрікса (форум, компонент comments) не дають потрібного контролю: немає верифікації покупки, складна модерація, немає перерахунку рейтингу. Ми розробляємо кастомну систему відгуків на ORM D7 — гнучку, швидку і під повним контролем. За 5 років впровадили понад 20 таких проєктів для каталогів від 1 000 до 50 000 товарів. Нижче — технічні деталі, які допоможуть оцінити підхід.

Чому ORM, а не інфоблок?

Інфоблоки швидкі на старті, але впираються в обмеження: складно робити складні вибірки, транзакції та розширювати модель без міграцій. ORM на базі D7 дає гнучкість і продуктивність. Наші тести показали: SQL-запити через DataManager виконуються в 2–3 рази швидше за аналогічні вибірки CIBlockElement::GetList() з множинними властивостями. При каталозі в 10 000 товарів різниця у швидкості виведення рейтингу сягає 0.5 секунди на сторінці. Крім того, ORM-модель легко покривається unit-тестами, що критично для великих проєктів.

Критерій Інфоблок ORM
Продуктивність Середня (властивості — додаткові JOIN) Висока (плоска таблиця)
Гнучкість Обмежена Максимальна
Масштабування Складно Просто (додавання полів міграціями)
Тестування Ускладнено Легко

Приклад ORM-моделі

namespace Your\Module\Orm; use Bitrix\Main\Entity; class ProductReviewTable extends Entity\DataManager { public static function getTableName() { return 'b_product_review'; } public static function getMap() { return [ new Entity\IntegerField('ID', ['primary' => true, 'autocomplete' => true]), new Entity\IntegerField('PRODUCT_ID', ['required' => true]), new Entity\IntegerField('USER_ID'), new Entity\StringField('AUTHOR_NAME', ['required' => true]), new Entity\StringField('AUTHOR_EMAIL'), new Entity\IntegerField('RATING', ['required' => true]), new Entity\TextField('ADVANTAGES'), new Entity\TextField('DISADVANTAGES'), new Entity\TextField('COMMENT'), new Entity\EnumField('STATUS', ['values' => ['PENDING', 'APPROVED', 'REJECTED']]), new Entity\DatetimeField('CREATED_AT'), new Entity\BooleanField('IS_VERIFIED_PURCHASE') ]; } } 

Така модель дозволяє використовувати всі можливості D7: фільтри, агрегати, транзакції.

Чому варто кастомізувати, а не використовувати готові рішення?

Стандартний компонент форуму (forum) надлишковий для простих відгуків — він тягне за собою дерево повідомлень, права доступу та складну модерацію. Компонент comments не має верифікації покупки, а його рейтинг розраховується спрощено. Кастомне рішення на ORM дає:

  • Повний контроль над схемою даних (додавання будь-яких полів міграціями).
  • Інтеграцію з замовленнями — позначка «Підтверджена покупка».
  • Перерахунок рейтингу з кешуванням (теговане кешування для швидкості).
  • Гнучкі правила антиспаму (обмеження по IP, email, частоті).

Порівняльні тести на каталозі з 5 000 товарів показали, що кастомна ORM-система завантажує сторінку товару на 0.3–0.5 секунди швидше, ніж рішення на форумі.

Як працює верифікація покупки?

Один з ключових елементів довіри — позначка «Підтверджена покупка». Ми перевіряємо історію замовлень через \Bitrix\Sale\OrderTable та \Bitrix\Sale\BasketTable. Код нижче виконує цю перевірку:

function isVerifiedPurchase(int $userId, int $productId): bool { $orders = \Bitrix\Sale\OrderTable::getList([ 'filter' => ['=USER_ID' => $userId, '=STATUS_ID' => 'F'], 'select' => ['ID'], ]); $orderIds = array_column(iterator_to_array($orders), 'ID'); if (empty($orderIds)) { return false; } $basket = \Bitrix\Sale\BasketTable::getList([ 'filter' => [ '=ORDER_ID' => $orderIds, '=PRODUCT_ID' => $productId, ], 'select' => ['ID'], 'limit' => 1, ])->fetch(); return (bool)$basket; } 

Статус 'F' означає виконане замовлення. Перевіряємо саме його, щоб відсікти скасовані та неоплачені. Це стандартна практика, описана в документації Бітрікса.

Як влаштована модерація?

Нові відгуки потрапляють у статус PENDING. В адміністративній частині ми створюємо кастомну сторінку з таблицею відгуків і кнопками «Схвалити» / «Відхилити». При зміні статусу:

  • APPROVED → відгук стає видимим на сайті, перераховується середній рейтинг товару.
  • REJECTED → відгук прихований, опціонально надсилається лист автору.

Повідомлення про новий відгук для модератора — поштова подія REVIEW_NEW_PENDING, шаблон у Налаштування → Поштові події.

Перерахунок рейтингу товару

Після схвалення або видалення відгуку потрібно перерахувати середній рейтинг і зберегти його у властивість товару (наприклад, AVERAGE_RATING числового типу). Це прискорює виведення рейтингу на сторінках каталогу — не потрібен JOIN з таблицею відгуків при кожному запиті.

function recalculateProductRating(int $productId): void { $result = \Bitrix\Main\Application::getConnection()->query( "SELECT AVG(RATING) as AVG_RATING, COUNT(*) as CNT FROM b_product_review WHERE PRODUCT_ID = {$productId} AND STATUS = 'APPROVED'" )->fetch(); \CIBlockElement::SetPropertyValuesEx($productId, false, [ 'AVERAGE_RATING' => round((float)$result['AVG_RATING'], 1), 'REVIEW_COUNT' => (int)$result['CNT'], ]); } 

Викликається з обробника події при зміні статусу відгуку.

Антиспам та обмеження

  • Перевірка на дублюючий відгук: один користувач — один відгук на товар (перевірка по USER_ID + PRODUCT_ID або по AUTHOR_EMAIL + PRODUCT_ID для гостей).
  • Капча для гостей — стандартний компонент bitrix:main.captcha (докладніше на Wikipedia).
  • Обмеження частоти: одна IP не може відправити більше 3 відгуків на годину (через \Bitrix\Main\Data\Cache або таблицю з таймстемпами). Цей захід знижує спам-потік на 95%.

Всі нові відгуки проходять модерацію, тому навіть якщо спамер обійде капчу, відгук не з'явиться на сайті без схвалення.

Що входить у розробку під ключ?

Ми надаємо повний пакет:

  • Документація по API відгуків (моделі, методи, події).
  • Вихідний код з коментарями та міграціями.
  • Інструкція для модераторів (адміністративна частина).
  • Навчання адміністраторів (1–2 години онлайн).
  • Гарантія 3 місяці на програмний код.

Всі роботи виконують сертифіковані спеціалісти 1С-Бітрікс з досвідом більше 5 років. Ми використовуємо теговане кешування, агенти та події для максимальної продуктивності. Розробка під ключ знижує трудозатрати на модерацію на 90% і окупається за 1–2 місяці роботи інтернет-магазину.

Терміни розробки

Масштаб Склад Термін
Базовий ORM-модель, форма, вивід, модерація в ОС 4–6 днів
Повний Верифікація покупки, перерахунок рейтингу, повідомлення, антиспам, адміністративний розділ 8–12 днів

Точні терміни залежать від вимог до дизайну та інтеграцій. Отримайте консультацію — ми підготуємо оцінку за 1 день. Зв'яжіться з нами, щоб обговорити проєкт.