Мы уже касались createFrame, но класс Bitrix\Main\Composite\BufferArea предоставляет больше возможностей для контроля над динамическими зонами.
1. Явное указание контейнера (setContainerId)
По умолчанию Битрикс сам создает div с уникальным ID вокруг динамической зоны.
Но иногда это ломает верстку (например, внутри ul или table). Вы можете указать существующий контейнер.
<div id="my-basket-container" class="header-basket">
<?
$frame = $this->createFrame("my-basket-container", false); // false = не создавать обертку
?>
В корзине: <?=$count?>
<?
$frame->end();
?>
</div>Теперь Битрикс будет искать div#my-basket-container и обновлять его содержимое, не вставляя лишних тегов.
2. Сложная логика заглушки (beginStub)
Заглушка — это то, что видит пользователь и поисковый робот. Она должна быть максимально похожа на итоговый контент, чтобы не было «прыжков» интерфейса (Layout Shift).
$frame = $this->createFrame()->begin();
// ДИНАМИКА (видят авторизованные)
echo "Привет, " . $USER->GetFirstName();
$frame->beginStub();
// ЗАГЛУШКА (видят гости и роботы)
// Здесь можно вывести "скелетон" загрузки или кнопку входа
echo '<span class="skeleton-loader"></span>';
$frame->end();3. Отмена композита для зоны (setBrowserStorage)
Если данные слишком приватные или тяжелые, можно отключить их сохранение в локальном хранилище браузера (Local Storage).
$frame = $this->createFrame();
$frame->setBrowserStorage(false); // Всегда запрашивать с сервераВывод:
Класс BufferArea (возвращаемый методом createFrame) дает верстальщику и разработчику полный контроль над тем, как сайт ведет себя в композитном режиме.
Используйте setContainerId, чтобы сохранить чистоту верстки, и качественные «стабы» для идеального UX.
BufferArea, композитный сайт, динамический контент, setContainerId, стабовый контент, createFrame, оптимизация битрикс.