Динамическая область контента в шапке, при включенном композите на сайте
<?php
use Bitrix\Main\Loader;
use Bitrix\Main\Page\FrameBuffered;
use Olegpro\IpGeoBase\IpGeoBase;
use Bitrix\Main\Config\Option;
/**
* Телефоны у нас хранятся через запятую в системных настройках нашего модуля
* В разных полях: одно для регионов, другое для москвы
*/
$phonesMsk = array_filter(array_map('trim', explode(',', Option::get('olegpro.sitesettings', 'phone_msk'))));
list($phoneRegion1) = array_values(array_filter(array_map('trim', explode(',', Option::get('olegpro.sitesettings', 'phone_region')))));
$msk = false;
if (Loader::includeModule('olegpro.ipgeobase')
&& ($record = IpGeoBase::getInstance()->getRecord())
&& ($record['city'] == 'Москва' || $record['region'] == 'Москва' || $record['region'] == 'Московская область')
) {
$msk = true;
}
?><p class="phone-paragraph" id="header_contacts"><?php
$frame = new FrameBuffered('header_contacts', false);
$frame->begin();
// {{{ Это часть динамическая - будет отдаваться в ответ на ajax-хит при композите
if($msk) {
echo array_map(function($phone) {
return sprintf('<span class="header-phone">%s</span>', $phone);
}, $phonesMsk);
}else{
if(isset($phoneRegion1)) {
echo sprintf('<span class="header-phone">%s</span>', $phoneRegion1);
}
}
// }}}
$frame->beginStub();
// {{{ Эта часть статическая - запишется в кеш композита на первом его хите или будет отдаваться, когда композит отключен
if(isset($phoneRegion1)) {
echo sprintf('<span class="header-phone">%s</span>', $phoneRegion1);
}
// }}}
$frame->end();
?></p>