Skip to content

Instantly share code, notes, and snippets.

@Elvinz
Last active February 4, 2020 08:37
Show Gist options
  • Save Elvinz/e31e3b63f06eccbfc40ba4419b65c278 to your computer and use it in GitHub Desktop.
Save Elvinz/e31e3b63f06eccbfc40ba4419b65c278 to your computer and use it in GitHub Desktop.
FrameBuffered - класс для буферизированных динамических областей. Именно объект этого класса создаётся когда в шаблоне компонента мы вызываем $this->createFrame(). С помощью этого класса удобно создавать заглушки динамических областей.
$frame = new \Bitrix\Main\Page\FrameBuffered("my_dynamic"); // или $this->createFrame() в шаблоне
$frame->begin();
// Содержание динамической области
$frame->beginStub();
// Заглушка
$frame->end();
Метод удобный, но в нём не работают отложенные функции. Для обхода этой ситуации создан второй класс:
FrameStatic - класс для статических динамических областей.
$dynamicArea = new \Bitrix\Main\Page\FrameStatic("my_dynamic");
$dynamicArea->setAnimation(true);
$dynamicArea->setStub("заглушка");
$dynamicArea->setContainerID("my-div-id");
$dynamicArea->startDynamicArea();
// Содержимое динамической области
// HTML, PHP, подключение компонентов
$dynamicArea->finishDynamicArea();
Класс ничего не буферизирует, а просто расставляет метки начала и конца динамической зоны и потом, когда страничка выполнилась вся по этим меткам вырезается контент динамической области.
<?
$dynamicArea = new \Bitrix\Main\Page\FrameStatic("my_dynamic");
$dynamicArea->setAnimation(true);
$dynamicArea->setStub("заглушка");
$dynamicArea->setContainerID("my-div-id");
$dynamicArea->startDynamicArea();
if(!empty($arResult["PRODUCT"]["QUANTITY"])){
// Поскольку от 1 до 12, а в массиве, как мы знаем, отсчет идет от нуля (0 до 11),
// то вычитаем 1 чтоб правильно выбрать уже из нашего массива.
$arr = [
'января',
'февраля',
'марта',
'апреля',
'майя',
'июня',
'июля',
'августа',
'сентября',
'октября',
'ноября',
'декабря'
];
?>
<span class="delivery_time">
Ближайшая дата доставки:
<?
if(date('w') == 6){
echo date('d', strtotime('+2 day')) .' ';
$month = date('n', strtotime('+2 day '))-1;
}else{
echo date('d', strtotime('+1 day')) .' ';
$month = date('n', strtotime('+1 day '))-1;
}
echo $arr[$month].' ';
echo " - ";
if(date('w') == 6){
echo date('d', strtotime('+4 day')) .' ';
$month2 = date('n', strtotime('next +4 day '))-1;
}else{
echo date('d', strtotime('+3 day')) .' ';
$month2 = date('n', strtotime('+3 day '))-1;
}
echo $arr[$month2].' ';
?>
</span>
<?} else{?>
<div class="delivery_none" >
<span>Уточняйте у менеджера</span></div>
<?}
$dynamicArea->finishDynamicArea();
?>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment