Блог Горошко Андрея 1C-Битрикс Отложенные функции в шаблонах: SetViewTarget и ShowViewContent

Отложенные функции в шаблонах: SetViewTarget и ShowViewContent

Средний рейтинг
Еще нет оценок

Частая задача верстальщика: компонент (например, детальная новость) выводится в основной области контента, но какую-то его часть (дату, теги, кнопку «Поделиться») нужно отобразить в другом месте — например, в боковой колонке (сайдбаре) или в шапке сайта.

Для этого в Битрикс существует механизм View Targets (области видимости).

Как это работает?

  1. В шаблоне компонента (или в любом месте страницы) мы заключаем кусок HTML в специальные методы «захвата». Битрикс не выводит этот HTML сразу, а запоминает его под определенным именем.
  2. В шаблоне сайта (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.

Мой рейтинг:

Добавить комментарий

Related Post

Кросс-платформенные SQL-запросы Возможности Bitrix\Main\DB\SqlHelperКросс-платформенные SQL-запросы Возможности Bitrix\Main\DB\SqlHelper

Средний рейтинг Еще нет оценок Если вы пишете «сырые» SQL-запросы (через $connection->query), вы рискуете привязаться к конкретной базе данных (обычно MySQL). SqlHelper — это абстракция, которая генерирует правильный SQL-синтаксис для текущей активной БД.

Обновление свойств элемента инфоблока 1с BitrixОбновление свойств элемента инфоблока 1с Bitrix

Средний рейтинг Еще нет оценок SetPropertyValuesEx() — это метод для сохранения значений свойств элемента информационного блока в БД. Этот метод более экономен в количестве запросов к БД, чем SetPropertyValues(), потому

Работа с корзиной (Recycle Bin) через API: Удаление и восстановление сущностейРабота с корзиной (Recycle Bin) через API: Удаление и восстановление сущностей

Средний рейтинг Еще нет оценок Модуль «Корзина» (recyclebin) позволяет не удалять данные безвозвратно, а временно сохранять их с возможностью восстановления. Это стандарт для задач, сделок CRM и элементов инфоблоков. 1.