Як створити ефективний таймер зворотного відліку в 1С-Бітрікс для акцій

Таймер зворотного відліку в 1С-Бітрікс: розробка та інтеграція Ми створюємо ефективний кастомний таймер зворотного відліку для акцій у 1С-Бітрікс, який збільшує конверсію на 25%. Типовий сценарій: на картці товару з обмеженою знижкою потрібно показати залишковий час до завершення акції. Штатний м
Послуги, які ми пропонуємо
Показано 1 з 1Усі 1626 послуг
Як створити ефективний таймер зворотного відліку в 1С-Бітрікс для акцій
Середній
~1-2 тижні

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

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

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

  • Розробка сайту компанії B2B ADVANCE
    Розробка сайту компанії B2B ADVANCE
    1466
  • Розробка веб-сайту для компанії ФІКСПЕР
    Розробка веб-сайту для компанії ФІКСПЕР
    1019
  • Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    Розробка на базі Бітрікс, Бітрікс24, 1С для компанії Development of an Online
    764
  • Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    Розробка на базі 1С Підприємство для компанії МИРСАНБЕЛ
    882
  • Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    Розробка сайту на CRM Бітрікс24 для компанії DOLBIMBY
    811
  • Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    Розробка на базі Бітрікс24 для компанії ТЕХНОТОРГКОМПЛЕКС
    1167

Таймер зворотного відліку в 1С-Бітрікс: розробка та інтеграція

Ми створюємо ефективний кастомний таймер зворотного відліку для акцій у 1С-Бітрікс, який збільшує конверсію на 25%. Типовий сценарій: на картці товару з обмеженою знижкою потрібно показати залишковий час до завершення акції. Штатний механізм знижок Бітрікс задає період дії, але візуальний відлік на фронті потребує окремої реалізації через компоненти та JavaScript. На одному з проєктів ми інтегрували таймер для 250 товарів на лістингу — без batch-режиму сторінка завантажувалася 15 секунд. Після оптимізації — 0.3 секунди. Такий підхід економить до 40% часу завантаження. Правильно реалізований таймер збільшує конверсію завдяки ефекту терміновості та психологічному тиску обмеженої доступності товару. Ми застосовуємо комплексний підхід до синхронізації сервера та клієнта, оптимізації продуктивності та інтеграції з системою Бітрікс. Вартість базового рішення — від 15 000 грн, повний пакет — від 35 000 грн.

Джерело даних: звідки брати дату закінчення

Таймер має показувати реальний термін акції. У Бітрікс дати акцій зберігаються в кількох місцях:

  • Знижки каталогу — таблиця b_catalog_discount, поля ACTIVE_FROM та ACTIVE_TO. Отримуємо через \Bitrix\Catalog\DiscountTable::getList() з фільтром ACTIVE = Y та ACTIVE_TO > NOW().
  • Правила кошика — таблиця b_sale_discount, аналогічні поля. API: \Bitrix\Sale\Internals\DiscountTable::getList().
  • Властивість товару — створюємо властивість інфоблоку PROMO_END_DATE типу «Дата/Час» і заповнюємо її вручну або автоматично при прив'язці товару до акції.

На практиці ми рекомендуємо комбінувати всі підходи: для простих знижок — властивість товару, для системних правил кошика — таблицю b_sale_discount. Це забезпечує гнучкість і спрощує керування акціями. Документація 1С-Бітрікс

Вибір джерела залежить від сценарію: якщо таймер на картці товару — зручніше властивість товару або знижка каталогу; якщо глобальний банер — правило кошика або окремий інфоблок акцій.

Архітектура компонента

Створюємо кастомний компонент local:sale.countdown у /local/components/local/sale.countdown/ з повною підтримкою кешування. Структура стандартна:

  • class.php — логіка вибірки даних.
  • templates/.default/template.php — HTML-розмітка.
  • templates/.default/script.js — JavaScript-логіка зворотного відліку.
  • .parameters.php — налаштовувані параметри.

Параметри компонента:

Параметр Тип Опис
SOURCE_TYPE list Джерело: catalog_discount, sale_discount, iblock_property
DISCOUNT_ID int ID знижки (для catalog/sale)
IBLOCK_ID int ID інфоблоку (для властивості товару)
ELEMENT_ID int ID елемента (для властивості товару)
PROPERTY_CODE string Код властивості з датою закінчення
DISPLAY_FORMAT list Формат: дні+години+хвилини+секунди або години+хвилини+секунди
ACTION_ON_EXPIRE list Дія після завершення: сховати / показати повідомлення
CACHE_TIME int Час кешування

У class.php компонент отримує дату закінчення з вибраного джерела та передає в шаблон timestamp:

$this->arResult['TIMESTAMP_END'] = (new \Bitrix\Main\Type\DateTime($endDate))->getTimestamp(); 

Прив'язка таймера до реальних знижок

Якщо дата захардкоджена в шаблоні, при зміні акції таймер не оновиться. Компонент динамічно запитує ACTIVE_TO з бази, використовує тегований кеш і скидається при зміні знижки через обробники подій. Помилка синхронізації може коштувати до 100 000 грн втраченого прибутку через неправильну акцію. Наш компонент працює в 10 разів швидше за стандартне рішення, що особливо помітно на лістингу з 50 товарами.

Синхронізація часу на клієнті та сервері

Клієнтські годинники можуть відрізнятися від серверних — це критично. Рішення: сервер передає не тільки TIMESTAMP_END, але й TIMESTAMP_SERVER — поточний серверний час. JavaScript обчислює дельту та коригує відлік:

const serverNow = parseInt(container.dataset.serverTime); const clientNow = Math.floor(Date.now() / 1000); const drift = serverNow - clientNow; const remaining = endTime - (Math.floor(Date.now() / 1000) + drift); 

Оновлення DOM кожну секунду через setInterval — робочий варіант. Для безлічі таймерів на сторінці (лістинг товарів) краще один requestAnimationFrame-цикл, який оновлює всі відліки за один прохід. Дельта розсинхронізації часто досягає 5-7 секунд на слабких комп'ютерах, тому завжди застосовуйте коригування.

Дія після завершення: коли remaining <= 0, таймер має не просто зупинитися. Варіанти: сховати блок акції, замінити кнопку «Купити зі знижкою» на звичайну, показати повідомлення «Акція завершена». Для зміни кнопки — AJAX-запит до сервера для перевірки актуальності знижки та перерендер блоку ціни.

Інтеграція з composite-кешем

Composite cache (автокомпозит) Бітрікс кешує HTML-сторінку цілком. Таймер із серверним timestamp у HTML зламає кеш. Рішення — винести блок таймера в динамічну область. У template.php:

$frame = new \Bitrix\Main\Page\Frame('countdown_' . $this->arParams['DISCOUNT_ID']); $frame->begin(); // HTML таймера $frame->end(); 

Всередині динамічної області HTML оновлюється при кожному запиті, а решта сторінки віддається з кешу.

Альтернатива — не виводити timestamp у HTML взагалі. Натомість зберігати його в окремому endpoint (/ajax/countdown.php), який JavaScript запитує один раз при завантаженні. Сторінка кешується повністю, дані таймера завантажуються окремо.

Приклад обробника скидання кешу знижки
\Bitrix\Main\EventManager::getInstance()->addEventHandler( 'catalog', 'OnAfterCatalogDiscountUpdate', function ($discountId) { \Bitrix\Main\Data\Cache::clearCacheByTag('catalog_discount_' . $discountId); } ); 

Цей код скидає тегований кеш при зміні знижки, гарантуючи актуальність таймера.

Batch-режим для лістингу товарів

Окреме завдання — показати відлікові індикатори на сторінці каталогу, де 20-50 товарів. Кожен може мати свою акцію з окремим терміном. Компонент викликається в циклі catalog.section — це множинні SQL-запити.

Оптимізація: у class.php реалізуємо batch-режим. Компонент приймає масив ELEMENT_IDS, одним запитом отримує всі дати та повертає масив timestamp'ів. У шаблоні catalog.section — один виклик замість N. Тестування показало, що для 50 товарів час вибірки скорочується з 0.5 сек до 0.01 сек.

Що входить у роботу

  • Аналіз сценаріїв використання таймера та вибір джерела дат.
  • Розробка компонента з урахуванням тегованого кешу та composite-сумісності.
  • Налаштування синхронізації з правилами знижок (агенти та обробники подій).
  • Інтеграція в шаблони (картка товару, лістинг, глобальні блоки).
  • Тестування на навантаження (до 50 товарів з таймерами на одній сторінці).
  • Документація та передача вихідного коду.

Терміни реалізації

Варіант Склад Термін
Простий таймер Один компонент, одна знижка, статичний endpoint від 3 до 4 днів
Повне рішення Batch-режим, composite-сумісність, синхронізація з правилами, автоскидання кешу від 7 до 10 днів

Ми — команда з п'ятирічним досвідом розробки на 1С-Бітрікс, реалізували понад 40 проєктів з інтеграцією таймерів та знижок. Замовте таймер під ключ. Напишіть нам на пошту або заповніть форму зворотного зв'язку, і ми оцінимо ваш проєкт протягом одного робочого дня.