Skip to content
  1. Компоненты
  2. BannerPro
  3. Интеграция на сайте
  4. Сниппет BannerPro

BannerPro

Сниппет BannerPro выводит баннеры по позициям. Для работы нужен pdoTools.

Синтаксис

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'tpl' => 'byAd',
  'limit' => 3
]}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &tpl=`byAd`
  &limit=`3`
]]

Основные параметры

ПараметрТипПо умолчаниюОписание
positionintпустоID позиции. Имеет приоритет над positionName
positionsstringпустоНесколько ID через запятую
positionNamestringпустоИмя позиции или список имён через запятую
positionKeystringпустоСиноним positionName (то же поведение)
contextstringтекущийФильтр позиций по context_key. Пусто или * = текущий контекст MODX
productIdintпустоID товара MiniShop3
tagsstringпустоМетки через запятую. Если параметр задан, баннеры без меток не попадут в выборку
tagsModestringanyany (хотя бы одна метка) или all (все перечисленные)
resourceintпустоID ресурса для таргетинга (явная подстановка)
parentintпустоID родителя для таргетинга по разделу
showInactiveboolfalseПоказывает баннеры с active = 0
sortbystringRAND()RAND(), idx / index, weighted, ab или поле byAd
outputSeparatorstring\nРазделитель между HTML баннеров в итоговой строке
tplstringbyAdЧанк для одного баннера. Без чанка сниппет выводит сырые поля в <pre>
cacheboolпустоПереопределяет bannerpro_cache для вызова
cacheLifetimeintпустоПереопределяет bannerpro_cache_lifetime

Чанки по позиции в выдаче

ПараметрОписание
tplFirstЧанк первого баннера
tplLastЧанк последнего баннера
tplOddЧанк нечётных баннеров
tplImageЧанк для type=image
tplImageFirstЧанк первого image-баннера
tplImageLastЧанк последнего image-баннера
tplImageOddЧанк нечётных image-баннеров
tplHtmlЧанк для type=html
tplHtmlFirstЧанк первого html-баннера
tplHtmlLastЧанк последнего html-баннера
tplHtmlOddЧанк нечётных html-баннеров

Для type=html сниппет использует byHtml, если не задан tplHtml.

При sortby=weighted направление сортировки принудительно DESC (вес задаётся в связи баннер + позиция, поле weight).

Чанки в пакете

ЧанкНазначение
byAdИзображение в ссылке [[+click_url]] с атрибутами data-bannerpro-*
byHtmlВывод [[+html]]. Если у баннера задан URL, ядро оборачивает HTML в ссылку клика

Для продакшена удобнее @FILE-чанки на Fenom. Примеры разметки: Интеграция.

Параметры pdoTools

BannerPro передаёт выборку в pdoFetch, поэтому поддерживает основные параметры pdoTools.

ПараметрОписание
limitЛимит выборки
offsetСмещение
sortdirASC или DESC
whereJSON с дополнительными условиями xPDO
innerJoinJSON с дополнительными join
selectJSON с дополнительными полями select
tplWrapperОбёртка с плейсхолдером output
tplOuterАлиас tplWrapper
wrapIfEmptyВыводит обёртку при пустом результате
toPlaceholderЗаписывает итог в плейсхолдер
toSeparatePlaceholdersЗаписывает баннеры в отдельные плейсхолдеры
outputSeparatorРазделитель между баннерами
fastModeБыстрый рендер чанков pdoTools
showLogВыводит лог pdoFetch для сессии mgr

Плейсхолдеры

ПлейсхолдерЧто содержит
idID баннера
nameНазвание баннера
urlURL перехода после клика
click_urlГотовый URL учёта клика (/{bannerpro_click}/{adposition} + UTM при включённых настройках)
click_url_absАбсолютный click_url (site_url + путь клика)
typeimage или html
tagsМетки баннера строкой через запятую
imageПолный URL изображения
htmlHTML-код баннера
sourceID Media Source
active0 или 1
descriptionОписание баннера
start, endДаты показа
adpositionID связи bannerpro_ads_positions
adID баннера в связи
position_idID позиции (bannerpro_positions.id)
position_nameИмя позиции
idxНомер строки в выдаче
weightВес связи баннер + позиция
product_idID товара MiniShop3
product_titlepagetitle товара
product_urlПолный URL товара
product_priceTV price
product_old_priceTV old_price
product_thumbTV thumb или image

Дополнительные параметры вызова, которых нет в свойствах сниппета, тоже попадают в плейсхолдеры строки.

Примеры

Один случайный баннер

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'tpl' => 'byAd',
  'limit' => 1,
  'sortby' => 'RAND()'
]}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &tpl=`byAd`
  &limit=`1`
  &sortby=`RAND()`
]]

Несколько позиций

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar,footer',
  'tpl' => 'byAd',
  'sortby' => 'idx',
  'sortdir' => 'ASC'
]}
modx
[[!BannerPro?
  &positionName=`sidebar,footer`
  &tpl=`byAd`
  &sortby=`idx`
  &sortdir=`ASC`
]]

JSON-фильтр

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'tpl' => 'byAd',
  'where' => '{"byAd.name:LIKE":"%акция%"}'
]}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &tpl=`byAd`
  &where=`{"byAd.name:LIKE":"%акция%"}`
]]

Обёртка блока

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'tpl' => 'byAd',
  'tplWrapper' => '@INLINE <div class="banners">{$output}</div>'
]}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &tpl=`byAd`
  &tplWrapper=`@INLINE <div class="banners">[[+output]]</div>`
]]

Вывод в плейсхолдер

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'tpl' => 'byAd',
  'toPlaceholder' => 'sidebarBanners'
]}
{$_modx->getPlaceholder('sidebarBanners')}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &tpl=`byAd`
  &toPlaceholder=`sidebarBanners`
]]
[[+sidebarBanners]]

A/B-деление

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'hero',
  'sortby' => 'ab',
  'limit' => 1
]}
modx
[[!BannerPro?
  &positionName=`hero`
  &sortby=`ab`
  &limit=`1`
]]

Работает только при ровно двух баннерах в позиции. TTL cookie задаёт bannerpro_ab_ttl.

Фильтр по контексту

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'context' => 'web',
  'tpl' => 'byAd'
]}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &context=`web`
  &tpl=`byAd`
]]

Фильтр по меткам

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'tags' => 'sale,promo',
  'tagsMode' => 'any',
  'tpl' => 'byAd'
]}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &tags=`sale,promo`
  &tagsMode=`any`
  &tpl=`byAd`
]]

Взвешенная ротация

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'sortby' => 'weighted',
  'limit' => 1,
  'tpl' => 'byAd'
]}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &sortby=`weighted`
  &limit=`1`
  &tpl=`byAd`
]]

Отдельный плейсхолдер на каждый баннер

fenom
{'!BannerPro' | snippet : [
  'positionName' => 'sidebar',
  'tpl' => 'byAd',
  'toSeparatePlaceholders' => 'banner'
]}
{$_modx->getPlaceholder('banner0')}
modx
[[!BannerPro?
  &positionName=`sidebar`
  &tpl=`byAd`
  &toSeparatePlaceholders=`banner`
]]
[[+banner0]]

toSeparatePlaceholders несовместим с tplWrapper и отключает кэш HTML сниппета.

Пример чанка

fenom
<article class="banner" data-banner-id="{$id}" data-adposition="{$adposition}">
  <a class="banner__link"
     href="{$click_url|escape:'html'}"
     {if $description}title="{$description|escape}"{/if}>
    {if $image}
      <img class="banner__image" src="{$image}" alt="{$name|escape}" loading="lazy" />
    {else}
      <span class="banner__title">{$name|escape}</span>
    {/if}
  </a>
</article>
modx
<article class="banner" data-banner-id="[[+id]]">
  <a href="[[+click_url]]" title="[[+description]]">
    <img src="[[+image]]" alt="[[+name]]" loading="lazy" />
  </a>
</article>

Ошибка pdoTools

Если pdoTools не установлен, сниппет вернёт:

text
You need to install pdoTools to use this snippet!

Установите pdoTools и очистите кэш MODX.