Skip to content
  1. Компоненты
  2. BannerPro
  3. Для разработчика

События MODX

BannerPro вызывает события после клика и после фиксации показа. Используйте их для своей аналитики, CRM, антифрода или логирования.

События

СобытиеГде вызываетсяКогда
OnBannerProClickbannerpro_invoke_click_event()После обработки клика, перед перенаправлением
OnBannerProImpressionbannerpro_invoke_impression_event()После pixel-запроса показа

Код событий лежит в core/components/bannerpro/include/events.php.

Поля события

КлючТипОписание
adbyAd|nullОбъект баннера
ad_idintID баннера
ad_namestringНазвание
ad_urlstringURL перехода
ad_typestringimage или html
product_idintID товара MiniShop3 или 0
positionintID позиции
position_namestringИмя позиции
adpositionintID связи bannerpro_ads_positions
ipstringIP посетителя
recordedboolЗапись создана в таблице статистики
duplicateboolСобытие повторилось в тот же день
referrerstringHTTP Referer, только для клика
redirect_urlstringURL после обработки чанка, только для клика

Пример плагина

php
<?php

if ($modx->event->name !== 'OnBannerProClick') {
    return;
}

$adName = (string) ($scriptProperties['ad_name'] ?? '');
$positionName = (string) ($scriptProperties['position_name'] ?? '');

$modx->log(
    modX::LOG_LEVEL_INFO,
    'BannerPro click: ' . $adName . ' / ' . $positionName
);

Подпишите плагин на OnBannerProClick.

HTTP webhook

Параллельно с MODX-событиями компонент может отправлять POST JSON на внешний URL. Настройки: Системные настройки.

ТипНастройка URLПоле event
Кликbannerpro_webhook_urlclick
Показbannerpro_webhook_impression_urlimpression

Подпись: заголовок X-BannerPro-Signature (HMAC-SHA256 от тела), если задан bannerpro_webhook_secret.

Компонент шлёт webhook клика после OnBannerProClick, до редиректа. Timeout 2 с, ошибки не блокируют переход. Webhook показа отправляется без ожидания ответа после OnBannerProImpression.

URL проверяется на SSRF: запрещены localhost, loopback и private/reserved IP в hostname.

JSON клика

event, ad_id, position_id, adposition, referrer, ip, click_id, timestamp (ISO8601), redirect_url, recorded, duplicate.

JSON показа

event, ad_id, position_id, adposition, ip, timestamp (ISO8601), recorded, duplicate.

Клиентские события

impression.js отправляет bannerpro:impression. analytics.js перехватывает клики и может отправлять bannerpro:click.

javascript
document.addEventListener('bannerpro:impression', function (event) {
  console.log(event.detail.adposition)
})

Connector actions

Админка обращается к assets/components/bannerpro/connector.php методом POST. Параметр action выбирает обработчик.

ГруппаActions
Баннерыads_getlist, ads_get, ads_create, ads_update, ads_remove, ads_enable, ads_disable, ads_getclicks, ads_duplicate, ads_bulk_enable, ads_bulk_disable, ads_bulk_remove, ads_bulk_assign_positions, ads_create_from_template
Шаблоныad_templates_getlist
Позицииpositions_getlist, positions_create, positions_update, positions_remove, positions_duplicate
Связиadpositions_getlist, adpositions_add, adpositions_remove, adpositions_sort, adpositions_update_weight
Статистикаstats_summary, stats_by_day, stats_top_ads, stats_export, stats_purge, stats_compare, clicks_getreferrers
Журналaudit_getlist
Меткиtags_suggest
Настройкиsettings_utm_get, settings_utm_update, settings_integrations_get, settings_integrations_update
MiniShop3resource_getlist
Mediamedia_sources_getlist

Connector требует сессию mgr. Мутации проверяют bannerpro_save, bannerpro_remove или bannerpro_stats.

Модель данных

Класс xPDOТаблица
byAdbannerpro_ads
byPositionbannerpro_positions
byAdPositionbannerpro_ads_positions
byClickbannerpro_clicks
byImpressionbannerpro_impressions
byAdTemplatebannerpro_ad_templates
byAuditbannerpro_audit

Поле byAdPosition.id попадает в плейсхолдер adposition и используется в ссылке клика.

Поля баннера byAd: category_id, max_clicks, max_impressions, show_hours (JSON), target_resource_id, target_parent_id, tags (JSON). Позиция byPosition: context_key.