Настройка уведомления "N человек смотрят этот товар" 1С-Битрикс

Наша компания занимается разработкой, поддержкой и обслуживанием решений на Битрикс и Битрикс24 любой сложности. От простых одностраничных сайтов до сложных интернет магазинов, CRM систем с интеграцией 1С и телефонии. Опыт разработчиков подтвержден сертификатами от вендора.
Предлагаемые услуги
Показано 1 из 1 услугВсе 1626 услуг
Настройка уведомления "N человек смотрят этот товар" 1С-Битрикс
Простая
~1 рабочий день
Часто задаваемые вопросы
Наши компетенции:
Этапы разработки
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1181
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Разработка веб-сайта для компании ФИКСПЕР
    813
  • 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 Appointment Booking Widget for a Medical Center
    564
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    747
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    655
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    976

Настройка уведомления «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-компонент с периодическим обновлением счётчика
  • Агент для очистки устаревших записей
  • Вывод блока с правильными условиями (порог, склонение)