
- MODX 3
- PHP 8.2
- Vue 3


Проверьте pdoTools, имя позиции, активность баннера, даты показа и связь баннера с позицией. Затем контекст, таргетинг и A/B:
context_key баннеры видны только в этом контексте MODX. Пустое поле: все контексты. Сниппет берёт текущий контекст MODX сам.show_hours, target_resource_id, target_parent_id, метки (&tags=), лимиты max_clicks / max_impressions.sortby=ab в слоте нужны ровно 2 баннера. Иначе выводятся все подходящие без cookie-деления.Минимальный вызов с showLog:
{'!BannerPro' | snippet : [
'positionName' => 'sidebar',
'tpl' => 'byAd',
'showLog' => true
]}[[!BannerPro?
&positionName=`sidebar`
&tpl=`byAd`
&showLog=`1`
]]showLog работает только для пользователя с активной сессией mgr.
Установите pdoTools и очистите кэш MODX.
Текст ошибки:
You need to install pdoTools to use this snippet!Проверьте bannerpro_media_source, источник файлов у конкретного баннера и путь в поле image.
Если баннер использует свой Media Source, настройка bannerpro_media_source не влияет на этот баннер.
Проверьте пять пунктов:
OnPageNotFound.[[+click_url]] / {$click_url}, не на прямой URL баннера.adposition означает ID связи bannerpro_ads_positions.bannerpro_filter_bots = Да клики с User-Agent ботов не записываются. Нужен пакет CrawlerDetect. Без него фильтр не срабатывает.Повторный клик с того же IP за сутки на ту же пару баннер + позиция не увеличивает счётчик. Перенаправление на URL баннера работает.
Настройка Фильтр ботов (bannerpro_filter_bots) исключает из статистики запросы, определённые как боты. Установите CrawlerDetect и включите настройку. Исторические данные не пересчитываются.
show_hours: дни недели и часы. Вне слота баннер скрыт.target_resource_id / target_parent_id ограничивают страницы.&tags= в сниппете баннер без нужных меток не попадёт в выборку.max_clicks / max_impressions скрывают баннер при достижении порога.Если у позиции заполнен context_key, баннеры этой позиции выводятся только в указанном контексте. Параметр сниппета &context= сверяет активный контекст с полем позиции. Подробнее: Интеграция.
Проверьте bannerpro_track_impressions, плагин BannerProImpression и наличие impression.js на странице.
Компонент фиксирует показ, когда баннер попадает в область видимости. Повтор с того же IP за сутки не создаёт новую запись.
При bannerpro_impression_lazy = Да pixel отправляется после задержки в области видимости, а не сразу при появлении.
При периоде Сегодня без событий за текущий день сводка должна быть 0 / 0, а на графике — одна точка с сегодняшней датой. Если видны прошлые дни, обновите пакет BannerPro.
Параметр sortby=ab делит трафик 50/50 только если в позиции ровно два активных баннера. Иначе выводятся все подходящие без cookie-деления.
Проверьте:
sortby=ab сниппет не кэширует HTML (как при RAND() и weighted). Не оборачивайте вызов во внешний кэш страницы, общий для всех посетителей.bannerpro_ab_ttl (дней, по умолчанию 30).Подробнее: Интеграция.
bannerpro_webhook_url задан и начинается с http:// или https://.localhost, 127.0.0.1 или private IP.[bannerpro] Webhook failed.Для отладки можно временно указать URL httpbin.org и проверить входящий JSON.
Подробнее: Системные настройки.
bannerpro_webhook_impression_url.bannerpro_track_impressions.event: impression. Подпись в заголовке X-BannerPro-Signature, если задан secret.Альтернатива webhook: внешняя аналитика (GTM, Метрика) или событие OnBannerProImpression.
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-баннера должен быть заполнен URL. Если URL пустой, компонент выводит сырой HTML без обёртки ссылки.
Используйте positionName.
{'!BannerPro' | snippet : [
'positionName' => 'sidebar',
'tpl' => 'byAd'
]}[[!BannerPro?
&positionName=`sidebar`
&tpl=`byAd`
]]Если заданы position и positionName, приоритет у position.
В форме баннера выберите тип HTML и заполните поле HTML. Сниппет выведет его через byHtml или через ваш tplHtml.
{'!BannerPro' | snippet : [
'positionName' => 'sidebar',
'tplHtml' => 'byHtml'
]}[[!BannerPro?
&positionName=`sidebar`
&tplHtml=`byHtml`
]]Если URL заполнен, BannerPro обернёт HTML в ссылку клика.
Передайте 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 товаров за запрос. Введите часть названия в фильтр.
Проверьте плагин 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}. Подробнее: Внешняя аналитика.
bannerpro → bannerpro_api_key (подпись «REST API ключ»).bannerpro_api_enabled = Да.curl подставьте значение настройки: -H "Authorization: Bearer <ключ>".Ключ не связан с логином менеджера. При пустом поле обновите пакет или задайте токен вручную. Подробнее: REST API.
Передайте ключ в заголовке:
Authorization: Bearer YOUR_API_KEYСверьте значение с bannerpro_api_key. См. Где взять ключ REST API?.
Включите bannerpro_api_enabled.
POST или PATCH при выключенном bannerpro_api_write_enabled. Включите настройку, если внешней системе нужно создавать или править баннеры. Подробнее: REST API.
Превышен bannerpro_api_rate_limit. Подождите минуту или увеличьте лимит (0 = без ограничения).
Фильтры передавайте отдельными 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.