
FAQ
Баннеры не выводятся на сайте
Проверьте pdoTools, имя позиции, активность баннера, даты показа и связь баннера с позицией. Затем контекст, таргетинг и A/B:
- Контекст позиции: при заполненном
context_keyбаннеры видны только в этом контексте MODX. Пустое поле: все контексты. Сниппет берёт текущий контекст MODX сам. - Таргетинг:
show_hours,target_resource_id,target_parent_id, метки (&tags=), лимитыmax_clicks/max_impressions. - A/B: при
sortby=abв слоте нужны ровно 2 баннера. Иначе выводятся все подходящие без cookie-деления.
Минимальный вызов с showLog:
{'!BannerPro' | snippet : [
'positionName' => 'sidebar',
'tpl' => 'byAd',
'showLog' => true
]}[[!BannerPro?
&positionName=`sidebar`
&tpl=`byAd`
&showLog=`1`
]]showLog работает только для пользователя с активной сессией mgr.
Сниппет пишет, что нужен pdoTools
Установите pdoTools и очистите кэш MODX.
Текст ошибки:
You need to install pdoTools to use this snippet!Картинки не отображаются
Проверьте bannerpro_media_source, источник файлов у конкретного баннера и путь в поле image.
Если баннер использует свой Media Source, настройка bannerpro_media_source не влияет на этот баннер.
Клики не считаются
Проверьте пять пунктов:
- Плагин BannerProClickout включён на
OnPageNotFound. - Чанк ведёт на
[[+click_url]]/{$click_url}, не на прямой URL баннера. adpositionозначает ID связиbannerpro_ads_positions.- Friendly URL не перехватывает путь раньше MODX.
- Фильтр ботов: при
bannerpro_filter_bots = Даклики с User-Agent ботов не записываются. Нужен пакет CrawlerDetect. Без него фильтр не срабатывает.
Повторный клик с того же IP за сутки на ту же пару баннер + позиция не увеличивает счётчик. Перенаправление на URL баннера работает.
Статистика занижена из-за ботов
Настройка Фильтр ботов (bannerpro_filter_bots) исключает из статистики запросы, определённые как боты. Установите CrawlerDetect и включите настройку. Исторические данные не пересчитываются.
Баннер активен, но не виден на сайте
- Проверьте start / end (календарный период).
- Расписание
show_hours: дни недели и часы. Вне слота баннер скрыт. - Таргетинг:
target_resource_id/target_parent_idограничивают страницы. - Метки: при
&tags=в сниппете баннер без нужных меток не попадёт в выборку. - Лимиты
max_clicks/max_impressionsскрывают баннер при достижении порога.
Контекст MODX и позиция
Если у позиции заполнен context_key, баннеры этой позиции выводятся только в указанном контексте. Параметр сниппета &context= сверяет активный контекст с полем позиции. Подробнее: Интеграция.
Показы не считаются
Проверьте bannerpro_track_impressions, плагин BannerProImpression и наличие impression.js на странице.
Компонент фиксирует показ, когда баннер попадает в область видимости. Повтор с того же IP за сутки не создаёт новую запись.
При bannerpro_impression_lazy = Да pixel отправляется после задержки в области видимости, а не сразу при появлении.
Статистика «Сегодня» показывает чужие даты
При периоде Сегодня без событий за текущий день сводка должна быть 0 / 0, а на графике — одна точка с сегодняшней датой. Если видны прошлые дни, обновите пакет BannerPro.
A/B-деление не работает
Параметр sortby=ab делит трафик 50/50 только если в позиции ровно два активных баннера. Иначе выводятся все подходящие без cookie-деления.
Проверьте:
- В слоте два баннера, оба проходят фильтры (даты, таргетинг, лимиты).
- При
sortby=abсниппет не кэширует HTML (как приRAND()иweighted). Не оборачивайте вызов во внешний кэш страницы, общий для всех посетителей. - TTL cookie:
bannerpro_ab_ttl(дней, по умолчанию 30).
Подробнее: Интеграция.
Webhook на клик не срабатывает
bannerpro_webhook_urlзадан и начинается сhttp://илиhttps://.- URL не указывает на
localhost,127.0.0.1или private IP. - Проверьте лог MODX на
[bannerpro] Webhook failed. - Редирект не ждёт ответа webhook. Таймаут — 2 с.
Для отладки можно временно указать URL httpbin.org и проверить входящий JSON.
Подробнее: Системные настройки.
Webhook на показ не срабатывает
- Заполните
bannerpro_webhook_impression_url. - Включён учёт показов:
bannerpro_track_impressions. - Те же SSRF-ограничения, что и для клика.
- Тело JSON содержит
event: impression. Подпись в заголовкеX-BannerPro-Signature, если задан secret.
Альтернатива webhook: внешняя аналитика (GTM, Метрика) или событие OnBannerProImpression.
Lead-форма через FormIt
BannerPro не ставит FormIt. Схема: HTML-баннер с click_url → landing с FormIt. Пошагово: FormIt.
Админка пустая
Проверьте VueTools, право view, консоль браузера и файл:
assets/components/bannerpro/js/mgr/vue-dist/bannerpro-admin.min.jsЕсли вы собираете .transport.zip из исходников, перед сборкой выполните npm run build.
Вкладка «Статистика» не видна
Пользователю нужно право bannerpro_stats. Назначьте его в политике доступа MODX и перезайдите в менеджер.
Кнопки создания и редактирования скрыты
Пользователю нужно право bannerpro_save. Для удаления нужно bannerpro_remove.
HTML-баннер идёт без ссылки
У HTML-баннера должен быть заполнен URL. Если URL пустой, компонент выводит сырой HTML без обёртки ссылки.
Как вывести баннеры по имени позиции
Используйте positionName.
{'!BannerPro' | snippet : [
'positionName' => 'sidebar',
'tpl' => 'byAd'
]}[[!BannerPro?
&positionName=`sidebar`
&tpl=`byAd`
]]Если заданы position и positionName, приоритет у position.
Как вывести произвольный HTML
В форме баннера выберите тип HTML и заполните поле HTML. Сниппет выведет его через byHtml или через ваш tplHtml.
{'!BannerPro' | snippet : [
'positionName' => 'sidebar',
'tplHtml' => 'byHtml'
]}[[!BannerPro?
&positionName=`sidebar`
&tplHtml=`byHtml`
]]Если URL заполнен, BannerPro обернёт HTML в ссылку клика.
Баннеры MiniShop3 не показываются на карточке товара
Передайте productId в сниппет и проверьте product_id у баннера.
На карточке товара:
{'!BannerPro' | snippet : [
'positionName' => 'shop-product-sidebar',
'productId' => $_modx->resource.id,
'tpl' => 'byAdProduct'
]}[[!BannerPro?
&positionName=`shop-product-sidebar`
&productId=`[[*id]]`
&tpl=`byAdProduct`
]]На каталоге и главной не передавайте productId.
Плейсхолдеры product_* пустые
Проверьте, что баннер привязан к товару, товар опубликован, а TV price, old_price, thumb или image заполнены.
Пикер товара показывает мало товаров
Пикер загружает до 200 товаров за запрос. Введите часть названия в фильтр.
GA4, Matomo или Метрика не получают события
Проверьте плагин BannerProAnalytics, настройку bannerpro_analytics_enabled и наличие счётчика на странице.
Для Метрики укажите bannerpro_analytics_ym_counter. Для GA4 через GTM создайте триггер на событие bannerpro_click или bannerpro_impression.
На демо-странице запустите php core/elements/demo/seed_bannerpro_demo.php. Если статус «плагин не установлен», а настройки верные, проверьте шаблон: при Fenom {extends} переменные {set} должны быть внутри {block}. Подробнее: Внешняя аналитика.
Где взять ключ REST API?
- Система → Настройки системы → namespace
bannerpro→bannerpro_api_key(подпись «REST API ключ»). - Включите
bannerpro_api_enabled= Да. - В
curlподставьте значение настройки:-H "Authorization: Bearer <ключ>".
Ключ не связан с логином менеджера. При пустом поле обновите пакет или задайте токен вручную. Подробнее: REST API.
REST API возвращает 401
Передайте ключ в заголовке:
Authorization: Bearer YOUR_API_KEYСверьте значение с bannerpro_api_key. См. Где взять ключ REST API?.
REST API возвращает 503
Включите bannerpro_api_enabled.
REST API возвращает 403 write disabled
POST или PATCH при выключенном bannerpro_api_write_enabled. Включите настройку, если внешней системе нужно создавать или править баннеры. Подробнее: REST API.
REST API возвращает 429
Превышен bannerpro_api_rate_limit. Подождите минуту или увеличьте лимит (0 = без ограничения).
REST API: 404 на маршрут с фильтрами
Фильтры передавайте отдельными query-параметрами, не внутри route:
✓ ?route=/ads&tag=sale
✗ ?route=/ads?tag=saleСм. REST API.
Как очистить старую статистику
Запустите cron:
php core/components/bannerpro/cron/purge.phpСрок хранения задают bannerpro_clicks_retention_days и bannerpro_impressions_retention_days.
