Налаштування відображення кількості переглядів товару 1С-Бітрікс

Наша компанія займається розробкою, підтримкою та обслуговуванням рішень на Бітрікс та Бітрікс24 будь-якої складності. Від простих односторінкових сайтів до складних інтернет-магазинів, CRM систем з інтеграцією 1С та телефонії. Досвід розробників підтверджено сертифікатами від вендора.
Пропоновані послуги
Показано 1 з 1 послугУсі 1626 послуг
Налаштування відображення кількості переглядів товару 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

Налаштування відображення кількості переглядів товару 1С-Бітрікс

Лічильник переглядів на картці товару створює ефект популярності. На відміну від покупок, перегляди накопичуються швидше — навіть у нового товару за кілька днів з'являються реальні цифри. Бітрікс не веде лічильник переглядів за товарами за замовчуванням, але надає інструменти для його реалізації.

Вбудований модуль статистики

Модуль statistic веде таблицю b_stat_page_hit — кожне звернення до сторінки пишеться туди з полем PATH (URI сторінки). З цієї таблиці можна отримати кількість переглядів детальної сторінки товару за її URL. Але це важкий спосіб: таблиця зростає швидко, запити до неї повільні, і модуль статистики часто відключений на навантажених сайтах.

Власний лічильник переглядів

Правильний підхід — зберігати лічильник прямо у властивості інфоблока. Створюється числова властивість VIEW_COUNT у b_iblock_property. При кожному відкритті детальної сторінки товару обробник події інкрементує значення.

Подія спрацьовує в компоненті bitrix:catalog.element, у component_epilog.php:

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]
);

Запис у component_epilog.php не блокує відрисовку сторінки — виконується після відправки відповіді клієнту (при використанні ob_flush/flush або вбудованих механізмів Бітрікс).

Проблема ботів і повторних переглядів

Без фільтрації лічильник накрутять пошукові роботи. Мінімальний захист — не рахувати перегляди, якщо:

  • У $_SERVER['HTTP_USER_AGENT'] є ознаки бота (Googlebot, YandexBot, Bingbot)
  • IP-адреса відвідувача вже дивилася цей товар за останні N хвилин

Для фільтрації повторів використовується сесія: $_SESSION['viewed_products'][$elementId] = time(). Якщо запис є і минуло менше 30 хвилин — лічильник не інкрементується.

Кешування та продуктивність

Якщо детальна сторінка кешується (а вона повинна кешуватися), component_epilog.php викликається при кожному перегляді, навіть якщо основний контент взятий із кешу. Це саме та поведінка, яка потрібна — лічильник працює незалежно від кешу сторінки.

При високому навантаженні (>100 переглядів на хвилину на один товар) прямий запис у b_iblock_element_prop створює конкурентні оновлення одного рядка. Рішення: інкремент через атомарний 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));

Назва колонки залежить від ID властивості — генерується Бітрікс автоматично при створенні властивості.

Вивід лічильника

У шаблоні bitrix:catalog.element додається вивід значення властивості:

$viewCount = (int)$arResult["PROPERTIES"]["VIEW_COUNT"]["VALUE"];
echo '<span>' . $viewCount . ' переглядів</span>';

Значення виводиться з правильним відмінюванням: «перегляд», «перегляди», «переглядів» залежно від числа.

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

  • Створення властивості VIEW_COUNT в інфоблоці каталогу
  • Додавання обробника в component_epilog.php з фільтрацією ботів
  • Реалізація захисту від повторного підрахунку через сесію
  • Атомарний INCREMENT для навантажених магазинів
  • Вивід лічильника з правильними закінченнями в шаблоні картки