Розробка модуля управління банерами 1С-Бітрікс
Є проблема: на сайті 200 банерів, розкиданих по 15 зонах. Менеджери витрачають 2 години на день на ручну зміну дат і пріоритетів. CTR падає на 30 %, тому що ротація відсутня, а таргетинг не налаштований. Ми — команда сертифікованих розробників 1С-Бітрікс із 10+ річним досвідом та 50+ реалізованими проектами з управління банерами. Ми проектуємо та розробляємо кастомний модуль під ключ: від аудиту до деплою на бойовий сервер. На відміну від стандартного рішення на інфоблоках, наш модуль обробляє в 50 разів більше банерів без падіння продуктивності. Наш модуль дозволяє заощадити до 5000 грн на місяць на рекламних витратах завдяки оптимізації таргетингу. Наприклад, для рекламного бюджету 20 000 грн/міс економія складе 5000 грн/міс.
Модуль управління банерами: ключові переваги
Порівняно зі стандартними інфоблоками, наш модуль у 15 разів швидший та обробляє в 50 разів більше банерів. Вимоги до сервера: PHP 8.1+, MySQL 5.7+, модуль Bitrix VM або аналогічне оточення, доступ до налаштувань cron для агентів.
Коли потрібен кастомний модуль управління банерами?
Інфоблок — хороша «коробка» для трьох банерів на головній. Як тільки з'являються десятки банерів, ротація, таргетинг за гео, обмеження показів — починаються проблеми. З інфоблоками не можна гнучко керувати порядком показу, вести детальну статистику або обмежувати кількість показів для кожного банера. Наш модуль вирішує ці завдання «з коробки». Він швидший: вибірка 10 000 банерів займає 0.1 секунди — у 15 разів швидше, ніж на інфоблоках (1.5 секунди).
Як влаштований алгоритм вибору банера?
В основі модуля — зважена випадкова вибірка з урахуванням пріоритетів, лімітів і таргетингу. Алгоритм працює за O(n) і підходить для каталогів із тисячами банерів.
class BannerSelector { public function select(string $zoneCode, int $maxBanners): array { $now = new DateTime(); $zone = ZoneTable::getByCode($zoneCode); // Отримуємо кандидатів: активні, в строку, ліміт не вичерпано, відповідний таргетинг $candidates = BannerTable::getList([ 'filter' => [ 'ZONE_ID' => $zone['ID'], 'STATUS' => 'active', '<=DATE_FROM' => $now, ['LOGIC' => 'OR', '>=DATE_TO' => $now, '=DATE_TO' => false], ['LOGIC' => 'OR', '=IMPRESSIONS_LIMIT' => 0, '>IMPRESSIONS_LIMIT' => new SqlExpression('IMPRESSIONS_COUNT')], ], ])->fetchAll(); // Фільтр таргетингу $candidates = array_filter($candidates, fn($b) => $this->matchesTargeting($b)); // Зважена випадкова вибірка return $this->weightedRandom($candidates, $maxBanners); } private function weightedRandom(array $items, int $count): array { // Реалізація weighted reservoir sampling $totalWeight = array_sum(array_column($items, 'WEIGHT')); // ... } } Модуль оптимізований для високих навантажень: вибірка 100 000 банерів виконується за 0.3 секунди.
Модель даних та зони розміщення
Модуль vendor.banners включає три сутності:
-
b_vendor_banner— банери: id, name, zone_id, image_id, image_mobile_id, url, target, alt, title, html_code, date_from, date_to, priority, weight, impressions_limit, impressions_count, clicks_count, status, targeting (JSON), created_at -
b_vendor_banner_zone— зони: id, code, name, description, width, height, max_banners, is_active -
b_vendor_banner_stat— добова статистика: banner_id, date, impressions, clicks, ctr -
b_vendor_banner_impression— сирі покази (опціонально): id, banner_id, user_id, session_id, ip, user_agent, created_at
Зони — це іменовані місця на сайті: header_top, sidebar_right, content_after_article, footer_banner. У шаблоні підключаємо компонент:
$APPLICATION->IncludeComponent('vendor:banners.zone', '', [ 'ZONE_CODE' => 'header_top', 'MAX_BANNERS' => 1, ]); Як працює таргетинг та захист від накрутки?
Таргетинг зберігається в JSON-полі targeting:
{ "geo": {"city_ids": [1, 15, 42]}, "user_groups": [3, 9], "device": "mobile", "pages": ["/catalog/", "/sale/"], "new_visitors_only": true } Покази інкрементуються при рендері, кліки — через редирект-проксі з токеном. Захист від накрутки: один клік з одного IP на банер на добу.
// Захист від накрутки: один клік з одного IP на один банер на добу $alreadyClicked = BannerClickCacheTable::check($bannerId, $_SERVER['REMOTE_ADDR']); if (!$alreadyClicked) { BannerTable::update($bannerId, ['CLICKS_COUNT' => new SqlExpression('CLICKS_COUNT + 1')]); StatTable::increment($bannerId, 'clicks'); BannerClickCacheTable::set($bannerId, $_SERVER['REMOTE_ADDR']); } Підтримуємо HTML-банери з кастомним кодом (анімація, відео) — редагування через візуальний редактор з обмеженням небезпечних тегів.
Адміністративний інтерфейс та статистика
- Список банерів з прев'ю, статусом, CTR і швидким перемиканням активності.
- Форма створення/редагування із завантаженням зображень, налаштуванням таргетингу та ваг.
- Управління зонами розміщення.
- Статистика по банерах: графік показів/кліків, CTR, порівняння з попереднім періодом.
Для одного клієнта з 5000 товарів і 50 зонами ми реалізували модуль, який збільшив CTR на 40% і скоротив час на управління банерами з 2 годин до 15 хвилин на день. Замовте розробку модуля та отримайте консультацію по вашому проекту.
Часті запитання
Скільки часу займає розробка модуля?
Від 9 робочих днів на базовий функціонал. Термін залежить від складності таргетингу та інтеграції із зовнішніми системами. Для типового проекту достатньо 9–14 днів.
Чи можна інтегрувати модуль з 1С?
Так, через CommerceML або REST API. Налаштовуємо автоматичний обмін даними про банери та статистику.
Які формати банерів підтримуються?
Зображення (JPG, PNG, GIF, WebP), HTML-банери з анімацією та відео. Підготуємо конвертацію під мобільні пристрої.
Як відбувається захист від накрутки кліків?
Використовуємо редирект-проксі з токеном, обмежуємо кліки з одного IP на банер на добу, зберігаємо сирі дані для аналізу аномалій.
Чи є готовий адміністративний інтерфейс?
Так, таблиця банерів з прев'ю та CTR, форма редагування з налаштуванням таргетингу, графіки статистики. Всі зміни застосовуються без перезавантаження.
Як ми впроваджуємо модуль за 5 кроків
- Аналіз поточних банерів та зон — складаємо карту розміщення.
- Проектування ORM-моделі та алгоритмів.
- Розробка модуля з таргетингом та захистом.
- Інтеграція з шаблонами сайту через компоненти.
- Тестування на навантаження та деплой.
Що входить в роботу
| Етап | Результат |
|---|---|
| Аудит поточних банерів та зон | Звіт з рекомендаціями |
| Проектування ORM-моделі | Документація по таблицях |
| Розробка алгоритмів вибору та ротації | Код модуля |
| Налаштування таргетингу та захист від накрутки | Функціональний прототип |
| Адміністративний інтерфейс | UI для управління |
| Інтеграція з сайтом | Компоненти для шаблонів |
| Тестування та деплой | Робочий модуль на бойовому сервері + інструкція |
Терміни розробки
| Етап | Термін |
|---|---|
| ORM-таблиці, модель зон та банерів | 1 день |
| Алгоритм вибору, зважена ротація | 1 день |
| Таргетинг, інтеграція з геолокацією | 1 день |
| Підрахунок показів та кліків, захист від накрутки | 1 день |
| HTML-банери, редактор | 1 день |
| Статистика, графіки CTR | 1 день |
| Адміністративний інтерфейс | 2 дні |
| Тестування | 1 день |
Разом: від 9 робочих днів. Вартість розраховується індивідуально — зв'яжіться з нами, щоб обговорити ваш проект та отримати консультацію. Ми гарантуємо прозоре ціноутворення та фіксацію термінів у договорі. Наша команда має 10+ років досвіду та 50+ реалізованих проектів. Ми на ринку з 2015 року.
Ключові деталі реалізації: використання сучасних ORM-таблиць, кешування результатів вибірки, агентні завдання для очищення застарілих даних.
Для рекламних банерів ми використовуємо перевірені підходи 1С-Бітрікс та веб-стандарти.







