Блог Горошко Андрея 1C-Битрикс Композитный режим в Битрикс: setFrameMode и createFrame для динамического контента

Композитный режим в Битрикс: setFrameMode и createFrame для динамического контента

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

Композитный режим — уникальная технология Битрикс, позволяющая отдавать пользователю статический HTML мгновенно, а динамические данные (корзина, приветствие «Привет, Иван») подгружать фоновым AJAX-запросом.

Чтобы это работало, компоненты должны быть адаптированы.

1. Включение поддержки композита (setFrameMode)

Если ваш компонент выводит одинаковый контент для всех пользователей (например, список новостей), достаточно просто сообщить системе, что он поддерживает композит.

В файле component.php (или class.php):

// В начале executeComponent или component.php
$this->setFrameMode(true);
  • true: Компонент поддерживает композит. Его HTML будет закэширован в статике.
  • false: Компонент не поддерживает композит (по умолчанию). При встрече такого компонента на странице композит для всей страницы будет отключен.

2. Динамические зоны (createFrame)

Если компонент содержит данные, зависящие от пользователя (например, «В корзине 5 товаров»), его нельзя кэшировать целиком. Нужно выделить динамическую зону.

Это делается в шаблоне компонента (template.php).

// template.php

// 1. Создаем фрейм
$frame = $this->createFrame()->begin('Загрузка...'); 
// 'Загрузка...' - это заглушка, которую увидит пользователь до подгрузки данных.
// Можно передать пустую строку или HTML-скелетон.
?>

<div class="basket-block">
    В вашей корзине: <?= $arResult['ITEMS_COUNT'] ?> товаров.
    На сумму: <?= $arResult['TOTAL_PRICE'] ?>
</div>

<?
// 2. Закрываем фрейм
$frame->end();
?>

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

  1. Битрикс кэширует страницу целиком.
  2. В месте вызова createFrame в кэш записывается заглушка («Загрузка…»).
  3. Для каждого пользователя браузер получает статику мгновенно.
  4. Сразу после этого отправляется фоновый AJAX-запрос к Битриксу.
  5. Битрикс выполняет компоненты, находит динамические зоны, генерирует для них актуальный HTML (для конкретного Ивана) и отправляет обратно.
  6. JS на клиенте заменяет заглушку на актуальный HTML.

Динамика без заглушки (stub)

Иногда заглушка не нужна, мы хотим показать «дефолтный» контент (например, кнопку «Войти»), а для авторизованных заменить её на «Профиль».

$frame = $this->createFrame()->begin(); 
// Контент по умолчанию (попадет в кэш)
?>
    <a href="/login/">Войти</a>
<?
$frame->beginStub(); 
// Контент динамический (придет аяксом и заменит дефолтный)
?>
    Привет, <?= $USER->GetFirstName() ?>! <a href="/logout/">Выйти</a>
<?
$frame->end();

Вывод:
Адаптация под композит — обязательный шаг для любого компонента.

  1. Если компонент статичен — $this->setFrameMode(true).
  2. Если есть личные данные — выделяем их в $this->createFrame().
    Это обеспечивает молниеносную загрузку сайта при сохранении персонального контента.

Композит Битрикс, Автокомпозит, setFrameMode, createFrame, динамическая зона, кэширование, ускорение сайта.

Мой рейтинг:

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

Related Post

Современная работа с разделами инфоблоков: SectionTable::getList в Bitrix D7 ORMСовременная работа с разделами инфоблоков: SectionTable::getList в Bitrix D7 ORM

Средний рейтинг Еще нет оценок Продолжая осваивать D7 ORM, перейдем от элементов к разделам. Для работы с разделами инфоблоков в современном API предназначен класс \Bitrix\Iblock\SectionTable. Он предоставляет тот же мощный и

result_modifier.php: Модификация данных компонента перед выводом в шаблонresult_modifier.php: Модификация данных компонента перед выводом в шаблон

Средний рейтинг Еще нет оценок Файл result_modifier.php — это специальный файл в шаблоне компонента, который выполняется после component.php, но до template.php. Его главная и единственная задача — модифицировать массив $arResult, подготавливая его к максимально простому выводу в

Как работать с DateTime и Date объектами в D7 для корректной обработки датКак работать с DateTime и Date объектами в D7 для корректной обработки дат

Средний рейтинг Еще нет оценок Работа с датами и временем в PHP может быть сложной из-за форматов, часовых поясов и ручных манипуляций. В старом ядре Битрикс для этого использовался набор