Korusol
9/6/2016 - 8:27 AM

Динамическая область контента в шапке, при включенном композите на сайте

Динамическая область контента в шапке, при включенном композите на сайте

<?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>