Композитный сайт
<?
//http://zhurov.me/blog/bitrix-composite-site.html
//Этим вызовом вы сообщаете, что ваш шаблон является статическим
$this->setFrameMode(true);
//Если шаблон вашего компонента является полностью динамическим
$this->createFrame()->begin();
//или так
$obFrame = $this->createFrame()->begin(‘Загрузка’);
<?$frame->beginStub();?>
<?if ($arResult['QUANTITY'] > 0):?>
всего <?=$arResult['QUANTITY'];?> товара
<?else:?>
у Вас нет покупок, начните их делать прямо сейчас
<?endif;?>
<?$frame->end();?>
/*
Важно понимать, что все, что находится между beginStub и end будет выполнено на каждом хите, но в кеш в этом месте запишется то, что вы передали в качестве параметра методу begin().
Т.е. в кеш запишется дефолтный текст, а после отдачи страницы из кеша будет запрошен актуальный контент, который практически мгновенно будет вставлен поверх «заглушки», в качестве которой мы использовали в примере строку «Загрузка».
К слову — вместо заглушки может быть все что угодно, ведь это строка, а значит можно вставить какой-то кусок верстки с гифкой, имитирующей подгрузку блока.
Таких пар beginStub() и end() может быть сколь угодно много в шаблоне компонента, но главное условие при этом — чтобы они не были вложены друг в друга.
*/
//А так можно обернуть отдельные не кешируемые области
$frame = $this->createFrame()->begin('Загрузка ...');
//какой-то код, который не надо кешировать
$frame->end();