Налаштування відображення кількості покупок товару 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С-Бітрікс

Лічильник покупок на картці товару — інструмент соціального доказу. «Куплено 847 разів» працює краще за будь-який банер зі знижкою. У Бітрікс ці дані є в базі, але за замовчуванням ніде не виводяться — потрібно витягнути їх із таблиць замовлень і підключити вивід у шаблоні.

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

Кожна позиція замовлення записується в таблицю 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().

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

Рахувати покупки при кожному перегляді картки товару — погана ідея при навантаженому магазині. Дані кешуються в b_iblock_element_prop через користувацьку властивість PURCHASE_COUNT з типом «Число». Агент оновлює значення за розкладом — раз на годину або раз на добу:

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

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

Вивід у шаблоні

У шаблоні компонента 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-контент картки незалежно від лічильника.

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

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

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