Недокументированный битрикс. Собственные настройки для баннеров в админке

В БУС Бизнес (а также в нескольких других редакциях) уже давно существует модуль рекламы (advertising). Его возможности заключаются в том, чтобы дать администратору возможность размещать на сайте баннеры различных типов — изображения, html-код, flash-баннеры (ныне покойный вариант). Возможности модуля позволяют организовать полноценную баннерную систему, вести аналитику по показам, кликам, настраивать различные ограничения (таргетинг) по страницам, городам и датам.

В общем чего тут говорить, возможности довольно широкие. Но и как многое в БУС, возможности кастомизации этого функционала сильно ограничены. Я не совру, если скажу, что их нет, почти нет.

Собственные настройки баннеров.

Я не такой уж активный пользователь данного модуля. Использовал его довольно редко для некоторых проектов, и не следил за обновлениями. Однако однажды вернувшись к нему, я смог заметить, что в модуле появились новые возможности, которых ранее не было:

  • новые типы баннеров, зависящие от «шаблона»
  • некий «Расширенный режим»
  • возможность добавить несколько слайдов
  • превью баннера

Скорее всего поменялось что-то еще, но это первое, что бросилось в глаза.

При выборе новых типов баннеров появляются свои собственные параметры, которые уникальны для каждого типа. Как обычно, стало интересно, и полез ковырять ядро.

Спустя пару минут стало понятно, что вся эта красота реализована с помощью обычных битриксовых компонентов, а точнее — параметров шаблонов компонента bitrix:advertising.banner.view.

Если вы читали мою предыдущую статью, то вы уже знаете, что надо делать, чтобы добавить собственные варианты отображения баннеров 🙂 Если вдруг нет, то стоит сначала ознакомиться с её материалом, а я постараюсь на пальцах объяснить жизненный цикл.

Все начинается с компонента bitrix:advertising.banner и его шаблонов. Если вы хотите добавить свой вариант отображения баннера, вам нужно создать новый шаблон для этого компонента. Сначала создаем компонент /local/components/bitrix/advertising.banner. К счастью для нас, компонент сделан в ООП стиле, поэтому в файле class.php нужно будет лишь создать пустой класс, который наследуется от \AdvertisingBanner. Единственная тут проблема — подключать родительский компонент придется с помощью прямого require, т.к. метод \CBitrixComponent::includeComponentClass не сможет найти класс-оригинал в связи с тем, что мы добавили свой компонент в пространство имен компонентов bitrix.

После этого нужно создать по одному шаблону для данного компонента на каждый вариант отображения баннера, который вы хотите реализовать.

Допустим, что вам необходимо добавить вариант отображения баннера в виде слайдера с использованием библиотеки slick. Для этого нужно создать шаблон slick для компонента advertising.banner. В этом шаблоне вам нужно произвести действия по подключению слайдера и обработке вывода каждого слайда.

Тут twig нотация, но я думаю, вы поняли.

Html содержимое каждого слайда баннера будет сформировано в компоненте с помощью компонента bitrix:advertising.banner.view. Этот компонент отвечает за вывод конкретного изображения/блока/слайда. Подключается он внутри bitrix:advertising.banner. Логики в этом компоненте тоже почти нет, просто создаем его копию по тому же принципу, что и в предыдущий раз. Далее создаем шаблон slick, и прописываем туда верстку каждого слайда, обрабатываем ситуации с композитом и параметрами.

Если вы обратили внимание, то все данные в этом шаблоне выводятся из массива arParams (переменная params в нашем модуле maximaster/tools.twig соответствует битриксовому массиву $arParams). Именно с помощью параметров компонента производятся все кастомные настройки баннеров. Сделать это можно с помощью параметров, которые в файле .parameters.php шаблона компонента bitrix:advertising.banner.view.

Способ описания настроек — ровно такой же, как и в обычных компонентах. Все те настройки, которые вы опишете, появятся в админке при выборе созданного вами типа отображения баннера, а вы уже можете спокойно использовать эти настройки, чтобы дополнительно обрабатывать показ баннеров: размеры, таргетинг и зависимость от каких-то других условий — все это можно реализовать в качестве доработок.

Да — неудобно. Да — по Битриксовски. Но можно! 🙂 Изучайте параметры, которые описаны в компоненте bitrix:advertising.banner.view. Там есть разные интересные возможности.

Пример того, как это может выглядеть в админке: