Настройка отображения количества просмотров товара в 1С-Битрикс

Для демонстрации популярности товара счётчик просмотров — самый быстрый способ. Покупки накапливаются медленно, а просмотры — уже через пару дней даже у новинки появляются реальные цифры. Битрикс не ведёт такой счётчик по умолчанию, но мы настраиваем его с защитой от накрутки и без потери производит
Услуги, которые мы предлагаем
Показано 1 из 1Все 1626 услуг
Настройка отображения количества просмотров товара в 1С-Битрикс
Простой
~1 день

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

Часто задаваемые вопросы

Последние работы

  • image_website-b2b-advance_0.webp
    Разработка сайта компании B2B ADVANCE
    1458
  • image_bitrix-bitrix-24-1c_fixper_448_0.webp
    Разработка веб-сайта для компании ФИКСПЕР
    1019
  • 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
    761
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Разработка на базе 1С Предприятие для компании МИРСАНБЕЛ
    880
  • image_crm_dolbimby_434_0.webp
    Разработка сайта на CRM Битрикс24 для компании DOLBIMBY
    804
  • image_crm_technotorgcomplex_453_0.webp
    Разработка на базе Битрикс24 для компании ТЕХНОТОРГКОМПЛЕКС
    1163

Для демонстрации популярности товара счётчик просмотров — самый быстрый способ. Покупки накапливаются медленно, а просмотры — уже через пару дней даже у новинки появляются реальные цифры. Битрикс не ведёт такой счётчик по умолчанию, но мы настраиваем его с защитой от накрутки и без потери производительности. За 8 лет опыта работы с Битрикс мы выработали оптимальный алгоритм.

Встроенный модуль статистики: почему не подходит

Модуль statistic пишет каждый хит в таблицу b_stat_page_hit с полем PATH. Теоретически можно считать просмотры по URI страницы. Практически — таблица распухает до миллионов строк, запросы становятся тормозными, а модуль часто отключают на высоконагруженных проектах. Для каталога с 50 000 товаров этот вариант нежизнеспособен.

Собственный счётчик через свойство инфоблока

Правильное решение — хранить счётчик прямо в свойстве инфоблока. Создаём числовое свойство VIEW_COUNT (b_iblock_property) и инкрементируем его при каждом открытии детальной страницы. Обработчик пишем в component_epilog.php компонента bitrix:catalog.element:

if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die(); $elementId = $arResult["ID"]; $iblockId = $arResult["IBLOCK_ID"]; $currentCount = (int)$arResult["PROPERTIES"]["VIEW_COUNT"]["VALUE"]; CIBlockElement::SetPropertyValuesEx( $elementId, $iblockId, ["VIEW_COUNT" => $currentCount + 1] ); 

Код выполняется после отправки HTML-буфера клиенту, поэтому не замедляет отрисовку.

Как защитить счётчик от накрутки ботами?

Без фильтрации счётчик улетит в космос за день. Минимальная защита:

  • Проверять $_SERVER['HTTP_USER_AGENT'] на наличие строк Googlebot, YandexBot, Bingbot.
  • Запоминать просмотры в сессии: $_SESSION['viewed_products'][$elementId] = time(). Если прошло меньше 30 минут — не инкрементируем.

Дополнительно можно вести таблицу логов с IP и временем, но сессия достаточно надёжна для 95% случаев.

Почему нужно использовать атомарный INCREMENT?

При высокой нагрузке — более 100 просмотров в минуту на один товар — обычный SetPropertyValuesEx создаёт гонку: два запроса могут прочитать одно и то же значение и записать одинаковый инкремент. Решение — атомарный UPDATE:

$DB->Query("UPDATE b_iblock_element_prop_s{$iblockId} SET PROPERTY_VIEW_COUNT = COALESCE(PROPERTY_VIEW_COUNT, 0) + 1 WHERE IBLOCK_ELEMENT_ID = " . intval($elementId)); 

Имя колонки PROPERTY_VIEW_COUNT зависит от ID свойства — его можно узнать через CIBlockProperty::GetList. Такой запрос не блокирует чтения и гарантирует точность даже при 5000 запросов в минуту.

Таблица сравнения методов

Метод Скорость Надёжность Защита от ботов Сложность
Модуль statistic Низкая Средняя Нет Низкая
Свойство VIEW_COUNT Высокая Высокая Есть Средняя
+ Атомарный INCREMENT Очень высокая Максимальная Есть Высокая

Вывод счётчика в шаблоне

В шаблоне bitrix:catalog.element выводим значение:

$viewCount = (int)$arResult["PROPERTIES"]["VIEW_COUNT"]["VALUE"]; echo '<span>' . $viewCount . ' просмотров</span>'; 

Для правильного склонения окончаний используйте функцию sklon:

function sklon($num, $forms) { $num = abs($num) % 100; if ($num > 10 && $num < 20) return $forms[2]; $num = $num % 10; if ($num == 1) return $forms[0]; if ($num >= 2 && $num <= 4) return $forms[1]; return $forms[2]; } echo $viewCount . ' ' . sklon($viewCount, ['просмотр', 'просмотра', 'просмотров']); 

Кеширование и счётчик просмотров

Стандартное кеширование компонента bitrix:catalog.element конфликтует со счётчиком: при включённом кеше инкремент не происходит. Решение — выносить код инкремента в component_epilog.php, который всегда выполняется после отдачи кеша и не кешируется.

Альтернативный подход — AJAX-инкремент: страница отдаётся из кеша, JavaScript делает POST-запрос на /local/ajax/view-count.php через секунду после загрузки. Минус: скрипт может не отработать у части пользователей.

Аналитика на основе счётчика

Накопленный счётчик полезен не только для отображения:

  • Сортировка «по популярности» в каталоге через ORDER BY PROPERTY_VIEW_COUNT DESC.
  • Сегментация товаров: «горячие» (500+ просмотров), «тёплые» (50–500), «холодные» (менее 50).
  • Выявление трендов: товары с быстро растущим счётчиком за последние 7 дней — кандидаты для акции.

Счётчик просмотров — доверительный сигнал: «Этот товар смотрели 2 400 раз» психологически равнозначно социальному доказательству. Данные счётчика экспортируются в CSV через кастомный скрипт или выводятся в административный отчёт через CAdminList. Это позволяет строить маркетинговые сегменты на основе реальной активности аудитории по категориям и брендам.

Рекомендации по порогам защиты

При настройке сессионной защиты от накрутки рекомендуем выставлять TTL не менее 30 минут. Для высоконагруженных проектов с более чем 100 одновременными посетителями используйте Redis-кеш вместо сессий PHP — это снижает нагрузку на файловую систему и ускоряет проверку при пиковом трафике. Для IP-защиты ведите отдельный счётчик обращений с временным окном 10 минут: более 5 просмотров одного товара с одного IP за 10 минут — блокируем инкремент.

Что входит в настройку под ключ

Мы выполняем полный цикл работ:

  • Создание числового свойства VIEW_COUNT в инфоблоке каталога
  • Написание обработчика в component_epilog.php с фильтрацией ботов
  • Реализация защиты от повторного счёта через сессию
  • Опционально: атомарный инкремент для высоконагруженных проектов
  • Вывод счётчика с правильными окончаниями в шаблоне
  • Тестирование на нагрузку до 100 одновременных запросов

Результат — счётчик, который не накручивается ботами, не тормозит сайт и корректно работает при любом кэшировании. Для расчёта стоимости и сроков свяжитесь с нами — оценим ваш каталог и нагрузку за один рабочий день.