В этой небольшой статье остановлюсь на одном моменте использования отложенных функций для вывода контента в шаблоне сайта в зависимости от свойства раздела. При грамотном использовании стандартных функций главного модуля Битрикс можно полностью избавить себя от применения условий вывода контента, которые обращаются к суперглобальному массиву $_SERVER.
Постановка задачи:
Нужно вывести баннер в header.php шаблона сайта на одних страницах сайта, а на других страницах не выводить. При этом предположим, что в карточках товаров нужно выводить данный баннер, а в разделах каталога — нет.
Решение стандартное:
Обычно стараются решить при помощи условий, которые содержат инструкции в $_SERVER, причем в случае работы с карточками товаров, разделами товаров, эти инструкции могут принять монструозные и неадекватные формы, которые затем при ошибках может быть сложно отлаживать.
Решение с использованием $APPLICATION->AddBufferContent():
- Задаем в разделах, где нужно выводить баннер свойство раздела (например, SHOW_BANNER) и присваиваем ему значение «Y».
- Для карточки товара, если используется комплексный компонент, то задаем свойство раздела следующим образом в element.php комплексного шаблона: $APPLICATION->SetDirProperty(«SHOW_BANNER», «Y»);
- В header.php шаблона сайта пишем такой код:
$APPLICATION->AddBufferContent(‘ShowBanner’);
function ShowBanner()
{
global $APPLICATION;
if ($APPLICATION->GetDirProperty(«SHOW_BANNER») != «Y»)
{
return ‘вывод тега IMG’;
}
}
А поскольку в свойствах можно передавать и адрес картинки, то через отложенную функцию можно вывести баннер, который будет относиться непосредственно к нужной карточке товара.