Налаштування лічильника покупок у Бітрікс: кейс та інструкція

Як налаштувати лічильник покупок у Бітрікс? Уявіть: на картці товару горить «Куплено 847 разів». Це сильніше за будь-який банер. Але в Бітрікс дані про покупки лежать у таблицях замовлень і не виводяться за замовчуванням. Сьогодні розберемо реальний кейс із практики: для інтернет-магазину з катал
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Налаштування лічильника покупок у Бітрікс: кейс та інструкція
Простий
~1 день

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

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

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

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1460
  • 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
    763
  • image_bitrix-bitrix-24-1c_mirsanbel_458_0.webp
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • image_crm_dolbimby_434_0.webp
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    809
  • image_crm_technotorgcomplex_453_0.webp
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1164

Як налаштувати лічильник покупок у Бітрікс?

Уявіть: на картці товару горить «Куплено 847 разів». Це сильніше за будь-який банер. Але в Бітрікс дані про покупки лежать у таблицях замовлень і не виводяться за замовчуванням. Сьогодні розберемо реальний кейс із практики: для інтернет-магазину з каталогом у 15 000 товарів ми налаштували лічильник за 2 дні, що підвищило конверсію на 12%. При цьому навантаження на сервер не зросло завдяки правильному кешуванню.

Лічильник покупок — потужний соціальний сигнал Соціальне доведення. Але в Бітрікс його немає з коробки. Рішення — витягти дані з таблиць замовлень, відфільтрувати лише успішні покупки та вивести на картку з мінімальним навантаженням. Наш досвід — понад 10 років роботи з Бітрікс, понад 40 проєктів — гарантує, що рішення працюватиме навіть при 100 000 товарів.

Чому важливо правильно фільтрувати статуси замовлень?

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

Статус замовлення Назва Враховувати?
N Прийнято (очікує обробки) Так, якщо товар реально зарезервовано
P Оплачено (очікує відвантаження) Так
F Виконано (відвантажено) Так
C Скасовано Ні
D Доставка очікується Так, якщо оплачено

Де зберігаються дані про покупки

Кожна позиція замовлення записується в таблицю b_sale_basket. Ключові поля:

  • PRODUCT_ID — ID елемента інфоблоку
  • QUANTITY — кількість одиниць у замовленні
  • ORDER_ID — прив'язка до замовлення

Таблиця b_sale_order містить статуси замовлень. Для підрахунку реальних покупок (не покинутих кошиків) потрібна фільтрація за статусом: поле STATUS_ID у b_sale_order. Зазвичай враховуються замовлення зі статусами 'N', 'P', 'F' — залежно від налаштувань магазину.

Запит для підрахунку

Прямий SQL для отримання кількості покупок конкретного товару:

SELECT SUM(b.QUANTITY) AS total_purchased FROM b_sale_basket b INNER JOIN b_sale_order o ON b.ORDER_ID = o.ID WHERE b.PRODUCT_ID = :product_id AND o.CANCELED = 'N' AND o.STATUS_ID IN ('N', 'P', 'F'); 

Запит до b_sale_basket через API: CSaleBasket::GetList() з фільтром по PRODUCT_ID, але цей метод не фільтрує за статусом замовлення — доведеться джойнити вручну або використовувати прямий запит через $DB->Query(). Докладніше про CSaleBasket.

Кешування лічильника

Рахувати покупки при кожному перегляді картки товару — погана ідея при навантаженому магазині. Дані кешуються в b_iblock_element_prop через користувацьке властивість PURCHASE_COUNT з типом «Число». Агент оновлює значення за розкладом — раз на годину або раз на добу. Для каталогів до 1 000 товарів достатньо агента раз на годину. Для 10 000+ товарів AJAX-завантаження у 3 рази швидше та знижує навантаження на базу на 40%.

CIBlockElement::SetPropertyValuesEx( $elementId, $iblockId, ['PURCHASE_COUNT' => $totalPurchased] ); 

Альтернатива — зберігати лічильник у b_catalog_element через окреме поле або в b_iblock_element через UF-поле UF_PURCHASE_COUNT.

Покрокова інструкція налаштування лічильника

  1. Визначте, які статуси замовлень вважаються успішними (зазвичай N, P, F).
  2. Створіть користувацьке властивість типу «Число» в інфоблоці каталогу (наприклад, PURCHASE_COUNT).
  3. Напишіть PHP-агент, який вибирає всі товари, виконує SQL-запит для кожного та зберігає значення у властивість.
  4. Налаштуйте агент на виконання раз на годину (або частіше залежно від обсягу).
  5. У шаблоні компонента catalog.element додайте виведення з властивості з урахуванням відмінювання числівників.
  6. Для великих каталогів реалізуйте AJAX-підвантаження: основний HTML кешується, а лічильник запитується окремо.

Який метод зберігання обрати для вашого каталогу?

Масштаб каталогу Рекомендоване оновлення Метод зберігання
до 1 000 товарів щогодини (агент) властивість інфоблоку
1 000–10 000 товарів раз на добу UF-поле
більше 10 000 товарів AJAX при відкритті прямий SQL + Redis

Виведення в шаблоні

У шаблоні компонента bitrix:catalog.element (файл template.php) додається виведення:

$purchaseCount = (int)$arResult["PROPERTIES"]["PURCHASE_COUNT"]["VALUE"]; if ($purchaseCount > 0) { echo '<span class="purchase-count">Куплено ' . $purchaseCount . ' раз</span>'; } 

Для більш гнучкого виведення (наприклад, «237 покупок», «1 покупка», «5 покупок» з правильними закінченнями) використовується функція відмінювання числівників.

Варіант з реальним часом

Якщо потрібен актуальний лічильник без затримки агента — дані завантажуються AJAX-запитом при відкритті картки. Компонент повертає лише структуру сторінки, а лічильник підтягується окремим запитом до контролера, який виконує SQL і повертає JSON. Це дозволяє кешувати основний HTML-контент картки незалежно від лічильника.

Що входить у послугу

  • Аналіз статусів замовлень та визначення «облікових» статусів для підрахунку
  • Створення UF-властивості PURCHASE_COUNT в інфоблоці каталогу
  • Написання агента для періодичного перерахунку всіх товарів
  • Додавання виведення лічильника в шаблон картки товару
  • Налаштування правильних закінчень для числівників
  • Адаптація під ваш каталог та навантаження

Економія на серверних ресурсах при використанні AJAX досягає 40% (приклад: каталог на 50 000 товарів). Отримайте консультацію у наших інженерів — ми оцінимо ваш проєкт і запропонуємо оптимальне рішення. Замовте консультацію!