В БУС Бизнес (а также в нескольких других редакциях) уже давно существует модуль рекламы (advertising). Его возможности заключаются в том, чтобы дать администратору возможность размещать на сайте баннеры различных типов — изображения, html-код, flash-баннеры (ныне покойный вариант). Возможности модуля позволяют организовать полноценную баннерную систему, вести аналитику по показам, кликам, настраивать различные ограничения (таргетинг) по страницам, городам и датам.
В общем чего тут говорить, возможности довольно широкие. Но и как многое в БУС, возможности кастомизации этого функционала сильно ограничены. Я не совру, если скажу, что их нет, почти нет.
Собственные настройки баннеров.
Я не такой уж активный пользователь данного модуля. Использовал его довольно редко для некоторых проектов, и не следил за обновлениями. Однако однажды вернувшись к нему, я смог заметить, что в модуле появились новые возможности, которых ранее не было:
- новые типы баннеров, зависящие от «шаблона»
- некий «Расширенный режим»
- возможность добавить несколько слайдов
- превью баннера
Скорее всего поменялось что-то еще, но это первое, что бросилось в глаза.
При выборе новых типов баннеров появляются свои собственные параметры, которые уникальны для каждого типа. Как обычно, стало интересно, и полез ковырять ядро.
Спустя пару минут стало понятно, что вся эта красота реализована с помощью обычных битриксовых компонентов, а точнее — параметров шаблонов компонента bitrix:advertising.banner.view.
Если вы читали мою предыдущую статью, то вы уже знаете, что надо делать, чтобы добавить собственные варианты отображения баннеров 🙂 Если вдруг нет, то стоит сначала ознакомиться с её материалом, а я постараюсь на пальцах объяснить жизненный цикл.
Все начинается с компонента bitrix:advertising.banner и его шаблонов. Если вы хотите добавить свой вариант отображения баннера, вам нужно создать новый шаблон для этого компонента. Сначала создаем компонент /local/components/bitrix/advertising.banner. К счастью для нас, компонент сделан в ООП стиле, поэтому в файле class.php нужно будет лишь создать пустой класс, который наследуется от \AdvertisingBanner. Единственная тут проблема — подключать родительский компонент придется с помощью прямого require, т.к. метод \CBitrixComponent::includeComponentClass не сможет найти класс-оригинал в связи с тем, что мы добавили свой компонент в пространство имен компонентов bitrix.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
<?php namespace Maximaster\Components; if (!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED !== true) { die(); } /* используем прямой require, т.к. битриксовый загрузчик будет подключать компонент из папки local */ require_once($_SERVER['DOCUMENT_ROOT'] . "/bitrix/components/bitrix/advertising.banner/class.php"); class MaximasterAdvertisingBanner extends \AdvertisingBanner { } |
После этого нужно создать по одному шаблону для данного компонента на каждый вариант отображения баннера, который вы хотите реализовать.
Допустим, что вам необходимо добавить вариант отображения баннера в виде слайдера с использованием библиотеки slick. Для этого нужно создать шаблон slick для компонента advertising.banner. В этом шаблоне вам нужно произвести действия по подключению слайдера и обработке вывода каждого слайда.
1 2 3 4 5 6 7 |
{% if result.BANNERS %} <div class="slider js-slick-slider"> {% for banner in result.BANNERS %} {{ banner }} {% endfor %} </div> {% endif %} |
Тут twig нотация, но я думаю, вы поняли.
Html содержимое каждого слайда баннера будет сформировано в компоненте с помощью компонента bitrix:advertising.banner.view. Этот компонент отвечает за вывод конкретного изображения/блока/слайда. Подключается он внутри bitrix:advertising.banner. Логики в этом компоненте тоже почти нет, просто создаем его копию по тому же принципу, что и в предыдущий раз. Далее создаем шаблон slick, и прописываем туда верстку каждого слайда, обрабатываем ситуации с композитом и параметрами.
1 2 3 4 5 6 |
<a href="{{ params.PROPS.LINK }}" class="slider__item slick-slide-loading" target="{{ params.PROPS.TARGET }}"> <img class="slider__item-img" src="{{ params.FILES.IMG.SRC }}" alt="{{ params.FILES.PROPS.TITLE }}" /> </a> |
Если вы обратили внимание, то все данные в этом шаблоне выводятся из массива arParams (переменная params в нашем модуле maximaster/tools.twig соответствует битриксовому массиву $arParams). Именно с помощью параметров компонента производятся все кастомные настройки баннеров. Сделать это можно с помощью параметров, которые в файле .parameters.php шаблона компонента bitrix:advertising.banner.view.
Способ описания настроек — ровно такой же, как и в обычных компонентах. Все те настройки, которые вы опишете, появятся в админке при выборе созданного вами типа отображения баннера, а вы уже можете спокойно использовать эти настройки, чтобы дополнительно обрабатывать показ баннеров: размеры, таргетинг и зависимость от каких-то других условий — все это можно реализовать в качестве доработок.
Да — неудобно. Да — по Битриксовски. Но можно! 🙂 Изучайте параметры, которые описаны в компоненте bitrix:advertising.banner.view. Там есть разные интересные возможности.
Пример того, как это может выглядеть в админке: