Всплывающее окно, появляющееся не вовремя, раздражает. То же окно в нужный момент с релевантным предложением приносит подписчиков и продажи. Разница — в триггерах, таргетинге и техническом исполнении. Мы имеем более 5 лет опыта разработки pop-up модулей на 1С-Битрикс и реализовали свыше 20 проектов. В Битрикс нет встроенного конструктора pop-up'ов. Маркетплейсные решения перегружены и конфликтуют с композитным кэшем. Кастомная разработка даёт полный контроль: что показываем, кому, когда и как часто. Кастомный pop-up в 3 раза быстрее загружается и не конфликтует с кэшем.
Почему кастомный pop-up лучше готовых решений?
Маркетплейсные решения часто имеют лишние зависимости, плохо интегрируются с кастомной логикой и не всегда поддерживают современные триггеры. Наш подход — модуль, управляемый через инфоблок, с гибкой системой триггеров и таргетинга. Гарантируем совместимость с composit‑кэшем и отсутствие конфликтов с другими модулями.
Как работают триггеры показа?
Триггер — событие, инициирующее показ pop-up. Технически каждый триггер — обработчик JavaScript, вызывающий функцию показа модального окна.
Exit-intent — курсор мыши движется к верхней границе viewport. Отслеживается через mouseleave на document.documentElement. На мобильных — скролл вверх, детектируемый через touchmove:
document.addEventListener('mouseleave', (e) => {
if (e.clientY < 10) showPopup('exit-intent');
});
Глубина скролла — пользователь проскроллил 50%, 70% или до конца страницы. Используем IntersectionObserver на маркерном элементе или вычисляем процент через window.scrollY / (document.body.scrollHeight - window.innerHeight).
Время на странице — setTimeout с задержкой 15-30 секунд.
Неактивность — пользователь не двигает мышью и не скроллит N секунд. Реализуется через debounce-таймер, сбрасываемый на mousemove, scroll, keydown.
Клик по элементу — стандартный addEventListener('click').
Количество просмотренных страниц — счётчик в sessionStorage.
Как настроить таргетинг для разных групп пользователей?
Pop-up без таргетинга — спам. Условия проверяются на сервере при генерации конфига и на клиенте при срабатывании триггера.
Серверные условия (формируются в PHP-компоненте):
- Группа пользователя (авторизован / гость / конкретная группа) через
$USER->GetUserGroupArray(). - Раздел сайта: только каталог, главная, исключить корзину через
$APPLICATION->GetCurDir(). - Тип устройства: десктоп / мобильный по User-Agent.
- UTM-метки: показать посетителям из рекламной кампании, проверка
$_GET['utm_source']с сохранением в сессию.
Клиентские условия:
- Частота показа: не чаще раза в сутки / за сессию / за N визитов через
localStorageс timestamp. - Закрытие: если пользователь закрыл pop-up — не показывать повторно, флаг
popup_{id}_closed.
Архитектура: компонент + инфоблок
Pop-up'ы управляются через инфоблок. Каждый элемент — отдельный pop-up с настройками:
| Свойство | Тип | Назначение |
|---|---|---|
| TRIGGER_TYPE | Список | exit-intent, scroll, timeout, inactivity |
| TRIGGER_VALUE | Строка | Процент скролла / секунды задержки |
| TARGET_PAGES | Строка | Маска URL: /catalog/, /, исключения |
| TARGET_GROUPS | Привязка | Группы пользователей |
| SHOW_FREQUENCY | Список | once, daily, session |
| POPUP_TEMPLATE | Список | Шаблон: subscribe, promo, feedback |
| CONTENT | HTML | Содержимое pop-up |
| ACTIVE_FROM / ACTIVE_TO | Дата | Период активности |
Компонент local:popup.manager подключается в header.php. Он выбирает активные pop-up'ы, фильтрует по серверным условиям и формирует JSON-конфигурацию для JavaScript.
Совместимость с composite-кэшем
Composite cache кэширует HTML. Если конфигурация pop-up'ов зашита в HTML — на закэшированной странице будет устаревший набор. Решение — вынос конфигурации в AJAX-endpoint. При загрузке страницы JavaScript запрашивает /ajax/popup_config.php, получает JSON. Страница полностью кэшируется, конфигурация всегда актуальна. Запрос весит 1-3 КБ и выполняется за 20-50 мс. Динамическая область Bitrix Frame — альтернатива для сложных сценариев.
Типовые шаблоны
Подписка на email — форма с одним полем и кнопкой, отправка через AJAX в обработчик, добавляющий email в почтовый список Битрикс (\Bitrix\Sender\Internals\Model\PostingRecipientTable) или через API внешнего сервиса. Обязательно двойное подтверждение (double opt-in) для соответствия ФЗ-152.
Промо-код — показываем код скидки с копированием по клику. Код берётся из купонов модуля sale (\Bitrix\Sale\Internals\DiscountCouponTable). Можно генерировать уникальный купон для каждого посетителя.
Обратный звонок — форма имя + телефон, отправка создаёт лид в CRM Битрикс24 через REST API (crm.lead.add) или записывает в локальный инфоблок.
Аналитика показов
Без аналитики непонятно, работает ли pop-up. Минимум — три метрики: показы, закрытия, конверсии. Данные отправляются в Яндекс.Метрику / Google Analytics через ym(COUNTER_ID, 'reachGoal', 'popup_show_' + popupId) или в собственную таблицу b_popup_stats.
Что входит в работу
- Проектирование архитектуры и настройка инфоблока
- Разработка кастомного компонента с триггерами и таргетингом
- Интеграция с композитным кэшем (AJAX или Frame)
- Настройка аналитики показов и конверсий
- Документация, обучение администраторов, поддержка в течение месяца
Сроки
| Вариант | Состав | Срок |
|---|---|---|
| Один pop-up | Фиксированный триггер, один шаблон, без управления из админки | 2-3 дня |
| Конструктор | Инфоблок, несколько триггеров, таргетинг, composite-совместимость, аналитика | 7-12 дней |
Оценим ваш проект и предложим оптимальное решение. Пишите — рассчитаем сроки и стоимость индивидуально.







