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

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

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

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

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

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

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

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

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

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

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. В этом шаблоне вам нужно произвести действия по подключению слайдера и обработке вывода каждого слайда.

{% 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, и прописываем туда верстку каждого слайда, обрабатываем ситуации с композитом и параметрами.

<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. Там есть разные интересные возможности.

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