Настройка ротации рекламных блоков 1С-Битрикс
Ротация — это показ разных баннеров в одной позиции по очереди или по весам. В Битриксе ротация реализована в модуле advertising через механизм контрактов и баннерных групп. Без этого модуля ротацию можно сделать на JavaScript или через кастомный PHP-код.
Ротация через модуль advertising
Архитектура модуля: Контракт (рекламная кампания) → Баннер (конкретное объявление) → Место (позиция на сайте). Место показа создаётся с типом (TEXT, HTML, BANNER) и привязывается к конкретной зоне сайта.
Таблицы модуля:
-
b_adv_banner— баннеры с контентом, датами, весами показа -
b_adv_contract— контракты (кампании), к которым привязаны баннеры -
b_adv_type— места показа -
b_adv_stat_day— дневная статистика показов и кликов по баннерам
Компонент в шаблоне:
$APPLICATION->IncludeComponent('bitrix:advertising.banner', '.default', [
'TYPE' => 'main_slider', // символьный код места показа
'SHOW_COUNT' => 1, // сколько баннеров за раз
'CACHE_TYPE' => 'N', // ротация + кеш несовместимы
]);
Кеш для ротирующихся блоков должен быть выключен (CACHE_TYPE = N) — иначе все пользователи видят один и тот же закешированный баннер.
Весовая ротация: механика
В b_adv_banner поле WEIGHT определяет вероятность показа баннера. Баннер с WEIGHT = 60 будет показываться примерно в 60% случаев при наличии двух баннеров с суммарным весом 100.
Модуль выбирает баннер на основе взвешенной случайной выборки при каждом запросе. Это создаёт нагрузку на БД при высоком трафике: каждый показ — это SELECT + INSERT в b_adv_stat_day. Для высоконагруженных сайтов статистику показов лучше агрегировать через очередь или отключить если не нужна.
Ротация без модуля advertising
Если модуль advertising недоступен (старая редакция) или его возможностей достаточно, реализуете ротацию через инфоблок + JavaScript.
PHP-сторона возвращает все активные баннеры для позиции в JSON. JavaScript на клиенте выбирает случайный (или следующий по очереди) и отображает:
class BannerRotator {
constructor(banners) {
this.banners = banners;
this.current = Math.floor(Math.random() * banners.length);
}
getNext() {
const banner = this.banners[this.current];
this.current = (this.current + 1) % this.banners.length;
return banner;
}
}
const rotator = new BannerRotator(window.bannerData['main_slider']);
// Показываем первый баннер, меняем каждые 5 секунд
setInterval(() => displayBanner(rotator.getNext()), 5000);
Данные баннеров выводятся в JS-переменную через PHP в шаблоне. Кеш PHP-компонента при этом работает — данные закешированы, ротацию делает клиент.
A/B-тестирование баннеров
Модуль advertising поддерживает A/B-тестирование через деление трафика по контрактам. Практически: создаёте два баннера в одной группе с весами 50/50, смотрите статистику кликов в /bitrix/admin/adv_stat.php через 7-14 дней, оставляете победителя.
Для серьёзного A/B-тестирования с сегментацией по устройствам, источникам трафика и регионам встроенного функционала не хватает — нужна интеграция с Google Optimize или Optimizely. Но для базового сравнения двух баннеров модуль достаточен.
Показ баннеров определённой аудитории
Контракты модуля advertising можно настроить на показ конкретным группам пользователей (авторизованным/неавторизованным), в конкретное время суток, при определённых условиях. Эти настройки хранятся в b_adv_banner в поле CONDITIONS в виде сериализованного массива.
Для региональной ротации — комбинируйте с региональным определением из $_SESSION['USER_REGION'] и фильтруйте баннеры по свойству региона перед передачей в ротатор.







