Частая задача верстальщика: компонент (например, детальная новость) выводится в основной области контента, но какую-то его часть (дату, теги, кнопку «Поделиться») нужно отобразить в другом месте — например, в боковой колонке (сайдбаре) или в шапке сайта.
Для этого в Битрикс существует механизм View Targets (области видимости).
Как это работает?
- В шаблоне компонента (или в любом месте страницы) мы заключаем кусок HTML в специальные методы «захвата». Битрикс не выводит этот HTML сразу, а запоминает его под определенным именем.
- В шаблоне сайта (header.php или footer.php) мы указываем место, где этот сохраненный HTML нужно вывести.
Шаг 1: Захват контента (SetViewTarget)
Допустим, мы находимся в template.php компонента новости.
// Начало захвата в область с именем 'sidebar_content'
$this->SetViewTarget('sidebar_content');
?>
<div class="news-tags">
Теги: <?= implode(', ', $arResult['TAGS']) ?>
</div>
<a href="#" class="btn-share">Поделиться</a>
<?
// Конец захвата
$this->EndViewTarget();
?>
<!-- Основной контент новости выводится как обычно -->
<h1><?= $arResult['NAME'] ?></h1>
<p><?= $arResult['DETAIL_TEXT'] ?></p>Важно: $this в шаблоне компонента указывает на объект шаблона (CBitrixComponentTemplate), у которого есть эти методы.
Шаг 2: Вывод контента (ShowViewContent)
Теперь откроем footer.php (или header.php), где у нас сверстан сайдбар.
<aside class="sidebar">
<h3>Информация</h3>
<?
// Выводим все, что попало в 'sidebar_content'
$APPLICATION->ShowViewContent('sidebar_content');
?>
</aside>Как это работает технически?
Это механизм отложенных функций. Битрикс сначала собирает всю страницу, выполняет все компоненты, и только в самом конце (в эпилоге) заменяет вызовы ShowViewContent на тот контент, который был собран через SetViewTarget.
Именно поэтому вы можете определить контент в теле страницы, а вывести его в шапке (header.php), которая физически находится выше по коду.
Вывод:
SetViewTarget и ShowViewContent — незаменимые инструменты для сложной верстки.
Они позволяют разрывать линейную структуру HTML и «телепортировать» куски кода из компонентов в любые места макета сайта.
SetViewTarget, ShowViewContent, отложенные функции Битрикс, буферизация, перемещение контента, шаблон компонента, sidebar.