Налаштування повідомлення "N людина дивиться цей товар" 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування повідомлення "N людина дивиться цей товар" 1С-Бітрікс
Проста
~1 робочий день
Часті питання

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

Етапи розробки

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

  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851
  • 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
    585
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    751
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    657
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    989

Налаштування сповіщення «N людей дивляться цей товар» 1С-Бітрікс

Сповіщення про кількість одночасних переглядів створює відчуття дефіциту та терміновості. «Зараз дивляться 12 людей» підштовхує до рішення про покупку. Ключове слово тут — «зараз»: дані мають відображати активність у реальному часі, а не накопичену статистику.

Як визначити «зараз дивляться»

Поняття «дивиться прямо зараз» — умовне. На практиці рахують користувачів, які відкрили сторінку товару за останні 2–15 хвилин (магазин вибирає вікно самостійно). Типовий вибір: 5–10 хвилин.

Для зберігання активних переглядів використовується одна з двох стратегій:

Варіант 1 — таблиця в MySQL/PostgreSQL. Створюється таблиця bl_product_viewers:

CREATE TABLE bl_product_viewers (
    id          INT AUTO_INCREMENT PRIMARY KEY,
    product_id  INT NOT NULL,
    session_id  VARCHAR(64) NOT NULL,
    last_seen   DATETIME NOT NULL,
    INDEX idx_product_time (product_id, last_seen)
);

При кожному перегляді вставляється або оновлюється запис за (product_id, session_id). Для підрахунку: SELECT COUNT(DISTINCT session_id) WHERE product_id = ? AND last_seen > NOW() - INTERVAL 5 MINUTE. Агент раз на 10 хвилин очищує застарілі записи.

Варіант 2 — Redis. Ключ viewers:product:{id} — це sorted set, де score = timestamp останнього візиту, member = session_id. Підрахунок: ZCOUNT viewers:product:123 (NOW-300) +inf. Застарілі записи видаляються через ZREMRANGEBYSCORE. Це швидше і не навантажує БД, але вимагає Redis на сервері.

Реалізація на стороні Бітрікс

У component_epilog.php детальної сторінки товару записується візит:

$productId  = $arResult["ID"];
$sessionId  = session_id();
$now        = date("Y-m-d H:i:s");

$DB->Query("INSERT INTO bl_product_viewers (product_id, session_id, last_seen)
    VALUES (" . intval($productId) . ", '" . $DB->ForSql($sessionId) . "', '" . $now . "')
    ON DUPLICATE KEY UPDATE last_seen = '" . $now . "'");

Підрахунок активних переглядів виноситься в окремий AJAX-контролер — не варто робити SELECT в epilog, інакше кожен запит сторінки буде гальмувати на читанні.

AJAX-оновлення лічильника

Лічильник оновлюється на клієнті без перезавантаження сторінки. JavaScript-компонент робить запит кожні 30–60 секунд:

setInterval(() => {
    fetch('/ajax/product-viewers/?id=' + productId)
        .then(r => r.json())
        .then(data => {
            if (data.count > 1) {
                document.querySelector('.viewers-count').textContent =
                    'Зараз дивляться: ' + data.count;
            }
        });
}, 30000);

AJAX-обробник у Бітрікс реєструється через CModule::AddAutoloadClasses() або як окремий PHP-файл із підключенням ядра через require $_SERVER['DOCUMENT_ROOT'] . '/bitrix/modules/main/include/prolog_before.php'.

Захист від нереалістичних цифр

Мінімальний поріг виводу — 2 або 3 людини. Показувати «1 людина дивиться цей товар» безглуздо і виглядає неправдоподібно. Максимальний поріг — якщо цифра здається неправдоподібно великою (наприклад, 500 людей), можна ввести м'який кап або рандомізацію в допустимому діапазоні.

Ботів із підрахунку виключають за тим самим принципом, що і в лічильнику переглядів: перевірка User-Agent у component_epilog.php перед записом у таблицю.

Що входить у налаштування

  • Створення таблиці bl_product_viewers (або налаштування Redis-ключів)
  • Запис візитів у component_epilog.php з фільтрацією ботів
  • AJAX-контролер для отримання актуальної кількості переглядів
  • JavaScript-компонент з періодичним оновленням лічильника
  • Агент для очищення застарілих записів
  • Вивід блоку з правильними умовами (поріг, відмінювання)