Дата последнего изменения: 10.11.2023
Технология была создана в первую очередь для использования в компонентах, которые, как правило, выводятся в теле страницы, но при этом внутри них могут быть заданы заголовок страницы, добавлен пункт в навигационную цепочку, добавлена кнопка в панель управления и так далее. Отложенные функции нельзя использовать в файлах шаблона компонента: template.php и result_modifier.php (так как результаты их выполнения кешируются).
Внутри отложенной функции можно подключать компоненты, но при этом необходимо вручную подключать файлы CSS и js.
или другая функция, обеспечивающая откладывание выполнения какой-либо функции, то:
Таким образом, существует стек A, в котором находится весь контент страницы, разбитый на части. В этом же стеке есть пустые элементы, предназначенные для их дальнейшего заполнения результатами отложенных функций.
Также существует стек B, в котором запоминаются имена и параметры отложенных функции в порядке их следования в коде.Таким образом, технология позволяет фрагментировать весь контент страницы, разбивая его на части с помощью специальных функций, обеспечивающих временное откладывание выполнения других функций (отложенных функций). В конце страницы все отложенные функции выполняются одна за другой и результаты их выполнения вставляются в отведенные для этого места внутри фрагментированного контента страницы. Затем весь контент склеивается и отправляется браузеру посетителя сайта.
Пример кода, в котором отложенная функция не будет отрабатывать код в шаблоне как ожидается:
if (!$APPLICATION->GetTitle()) echo "Стандартная страница"; else echo $APPLICATION->GetTitle();
А такой код будет работать:
$APPLICATION->AddBufferContent('ShowCondTitle'); function ShowCondTitle() { global $APPLICATION; if (!$APPLICATION->GetTitle()) return "Стандартная страница"; else return $APPLICATION->GetTitle(); }
Ещё один пример
$page_title = $APPLICATION->GetPageProperty($title); if (strlen($page_title)<=0) $page_title = "Заголовок страницы по умолчанию"; echo $page_title;
этот код не будет работать по той причине, что все отложенные функции выполняются в самом конце страницы, в служебной части эпилога.
Пример:
<? require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Старый заголовок"); ?> <? global $APPLICATION; $strTitle = $APPLICATION->GetTitle(); echo $strTitle." - Заголовок страницы
"; $APPLICATION->SetTitle('Новый заголовок'); ?> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?>
На странице будет напечатано - Старый заголовок, а в браузере - Новый заголовок.
|
Технология позволяет создавать отложенные функции с помощью метода CMain::AddBufferContent.
Список ссылок по теме: