Баннеры и слайдеры - инфоблок или модуль рекламы
Выводим баннеры и слайдер на сайте: инфоблок со своей вёрсткой или штатный модуль рекламы со счётчиками показов.
Решение
Способ вывода выбирают по одному короткому вопросу: нужна ли по этому блоку статистика. Слайдер на главной с тремя картинками - это инфоблок и обычный список. Ротация с ограничением показов, таргетингом и подсчётом кликов - это модуль рекламы, и своими руками её лучше не повторять.
Выводим слайдер из инфоблока:
$APPLICATION->IncludeComponent('bitrix:news.list', 'slider', [ 'IBLOCK_TYPE' => 'content', 'IBLOCK_ID' => $bannersIblockId, 'NEWS_COUNT' => 5, 'SORT_BY1' => 'SORT', 'SORT_ORDER1' => 'ASC', 'CHECK_DATES' => 'Y', // не показывать снятые с публикации по датам 'PROPERTY_CODE' => ['LINK', 'IMAGE_MOBILE'], 'CACHE_TYPE' => 'A', 'CACHE_TIME' => 3600,]);Инфоблок даёт полную свободу вёрстки и привычное место хранения картинок. Ссылка, подпись, картинка для телефона - это обычные свойства элемента, а контент-менеджер правит их в привычном интерфейсе, без обучения новому разделу админки.
Ставим штатный баннер со статистикой:
$APPLICATION->IncludeComponent('bitrix:advertising.banner', '', [ 'TYPE' => 'MAIN_TOP', // тип баннера из настроек модуля 'NOINDEX' => 'Y', 'CACHE_TIME' => 0, // показы считаются только без кэша]);Модуль рекламы считает показы и клики сам, без единой строки своего кода. Взамен он требует дисциплины с кэшем: страница, отданная из кэша, показов не добавляет, и статистика начинает врать ровно на величину кэширования.
Разводим картинки по размерам экрана:
<picture> <source media="(max-width: 640px)" srcset="<?= $mobile ?>"> <img src="<?= $desktop ?>" loading="lazy" alt="<?= $alt ?>"></picture><!-- одна картинка на все экраны даёт либо мыло, либо лишние мегабайты -->Проверяем, почему баннер не виден:
$rs = CIBlockElement::GetList([], ['IBLOCK_ID' => $bannersIblockId, 'ID' => $id], false, false, ['ID', 'ACTIVE', 'ACTIVE_FROM', 'ACTIVE_TO', 'SORT']);print_r($rs->GetNext());// активность, даты публикации и сортировка объясняют почти все пропажиКомпозитный режим и статистика показов уживаются друг с другом плохо. Готовая страница отдаётся из кэша до выполнения кода, поэтому блок со счётчиком либо выносят из композита, либо подгружают отдельным запросом после загрузки страницы.
Место вывода тоже стоит выбрать заранее. Баннер в шапке или подвале живёт в шаблоне сайта и показывается на всех страницах сразу. Баннер одной страницы аккуратнее держать во включаемой области: тогда его правит редактор, а не разработчик по каждой просьбе.
Размер картинки задают вёрсткой, а не загруженным файлом. Исходник в четыре тысячи пикселей шириной замедляет загрузку главной страницы сильнее любого тяжёлого компонента, поэтому картинки уменьшают до реальных размеров блока.
Типичные проблемы
Новый баннер не появился на сайте.
Страница отдаётся посетителю из кэша компонента или из готового композитного файла. Кэш сбрасывают вручную, а блоки со статистикой показов из композита выносят.
Баннер пропал сам по себе.
Закончились даты публикации элемента либо исчерпан заданный лимит показов в настройках баннера. Проверяют признак активности, даты публикации и остаток показов, а не вёрстку шаблона.
Клики по баннеру не считаются.
В разметке шаблона стоит прямая ссылка на страницу мимо перехода модуля рекламы. Учёт кликов работает только через штатный адрес перехода, подставленный самим модулем.
На телефоне баннер занимает пол-экрана и грузится долго.
Одна и та же картинка отдаётся на телефон и на широкий монитор. Для маленьких экранов готовят отдельное изображение и подключают его условием по ширине.
Статистика показов меньше реального трафика.
Страницы отдаются из кэша, а показ засчитывается только при реальном выполнении кода. Это обычная плата за кэширование, и её учитывают при чтении отчётов модуля.
Частые вопросы
Инфоблок или модуль рекламы?
Инфоблок - когда нужен слайдер со своей вёрсткой и правкой из привычного интерфейса. Модуль рекламы - когда нужны ротация, ограничение показов, таргетинг и статистика кликов: повторять это своими силами дороже, чем настроить.
Почему баннер показывается не всем?
В модуле рекламы у баннера есть условия показа: тип, вес в ротации, лимит показов, привязка к разделам и группам. Проверяют их, а не код вывода.
Можно ли кэшировать блок с баннерами?
Слайдер из инфоблока - да, обычным кэшем компонента. Блок модуля рекламы кэшируют только осознанно: показы засчитываются лишь при выполнении кода, и статистика теряется.
Как сделать разные баннеры для мобильных?
Отдельным свойством с картинкой для телефона и условием по ширине экрана в разметке. Масштабирование одной картинки экономит время вёрстки, но тратит трафик и портит вид.
Где хранить ссылки и подписи баннеров?
В свойствах элемента инфоблока или в настройках баннера модуля - там, где их правит контент-менеджер. Ссылки, зашитые в шаблон, каждый раз возвращают задачу к разработчику.
Смежное
- Шаблон сайта - оглавление подтемы
- Карта с точками на сайте: данные, вывод, фильтр по городу - соседний блок с данными из инфоблока
- Включаемые области: файлы, области шаблона, правка менеджером - другой способ отдать блок редакции
- Натяжка вёрстки на шаблон сайта: разрез, пути, компоненты - куда встраивают такие блоки
- Подборки товаров: новинки, хиты и акции на витрине - товарные блоки вместо картинок
- Композитный сайт: включение, ускорение, ограничения - почему статистика показов страдает
- Шаблоны сайта - устройство шаблона, где живёт блок
- Баннерная реклама - устройство модуля рекламы
- Баннеры на сайте: тип рекламы, вывод и период показа - настройка модуля рекламы по шагам