- Модуль: landing
- Путь к файлу: ~/bitrix/modules/landing/lib/block.php
- Класс: BitrixLandingBlock
- Вызов: Block::view
public function view($edit = false, BitrixLandingLanding $landing = null, array $params = array())
{
global $APPLICATION;
if ($this->dynamicParams)
{
$this->setDynamic($edit);
}
if (!isset($params['wrapper_show']))
{
$params['wrapper_show'] = true;
}
if (!isset($params['force_unactive']))
{
$params['force_unactive'] = false;
}
if (!isset($params['skip_system_script']))
{
$params['skip_system_script'] = false;
}
if (
!$edit &&
$params['wrapper_show'] &&
!Config::get('public_wrapper_block')
)
{
$params['wrapper_show'] = false;
}
if ($this->deleted)
{
return;
}
if ($edit || $this->active || $params['force_unactive'])
{
$assets = AssetsManager::getInstance();
if ($css = $this->getCSS())
{
$assets->addAsset($css, AssetsLocation::LOCATION_TEMPLATE);
}
if ($ext = $this->getExt())
{
$assets->addAsset($ext, AssetsLocation::LOCATION_TEMPLATE);
}
if (!$edit || !$this->repoId)
{
if ($js = $this->getJS())
{
$assets->addAsset($js, AssetsLocation::LOCATION_AFTER_TEMPLATE);
}
}
// calling class(es) of block
foreach ($this->getClass() as $class)
{
$classBlock = $this->includeBlockClass($class);
if ($classBlock->beforeView($this) === false)
{
return;
}
}
}
// get manifest
if ($edit && !$params['skip_system_script'])
{
$manifest = $this->getManifest();
}
// develop mode - rebuild and reset content
if (
$this->id > 0 &&
!$params['skip_system_script'] &&
defined('LANDING_DEVELOPER_MODE') &&
LANDING_DEVELOPER_MODE === true
)
{
if (!isset($manifest))
{
$manifest = $this->getManifest();
}
if (isset($this->metaData['DATE_MODIFY']))
{
$modifyTime = $this->metaData['DATE_MODIFY']->getTimeStamp();
}
else
{
$modifyTime = 0;
}
if ($modifyTime < $manifest['timestamp'])
{
$count = 0;
$limit = 1;
UpdateBlock::executeStep([
'ID' => $this->id
], $count, $limit, $paramsUpdater = []);
$this->resetContent();
$this->content = $this->getContent();
}
}
if (!BitrixMainModuleManager::isModuleInstalled('bitrix24'))
{
if (mb_strpos($this->content, '/upload/') !== false)
{
$this->content = preg_replace(
'#"//[^'^"]+/upload/#',
'"/upload/',
$this->content
);
}
if (Manager::getOption('badpicture2x') == 'Y')
{
if (mb_strpos($this->content, 'srcset="') !== false)
{
$this->content = str_replace(
'srcset="',
'data-srcset-bad="',
$this->content
);
}
if (mb_strpos($this->content, '2x)') !== false)
{
$this->content = preg_replace(
"#(, url('[^'^"]+') 2x)#",
'',
$this->content
);
}
}
}
// show or not a wrapper of block
if ($params['wrapper_show'])
{
if ($this->id > 0)
{
if ($edit)
{
$anchor = $this->getAnchor($this->id);
}
else
{
$anchor = $this->anchor
? htmlspecialcharsbx($this->anchor)
: $this->getAnchor($this->id);
}
}
else
{
$anchor = 'block' . rand(10000, 100000);
}
$classFromCode = 'block-' . $this->code;
$classFromCode = preg_replace('/([^a-z0-9-])/i', '-', $classFromCode);
$classFromCode = ' ' . $classFromCode;
$content = '';
if ($landing && $landing->getPreviewMode())
{
$content .= "";
}
$content .= 'id . '" ' : '') .
(($edit && isset($manifest['block']['subtype'])) ? 'data-subtype="' . $manifest['block']['subtype'] . '" ' : '') .
'class="block-wrapper' .
(!$this->active ? ' landing-block-deactive' : '') .
($this->metaData['DESIGNER_MODE'] ? ' landing-designer-block-mode' : '') .
$classFromCode .
'">' .
$this->content .
'
';
}
else
{
$content = $this->content;
}
// @tmp bug with setInnerHTML save result
$content = preg_replace('/&([^s]{1})/is', '&$1', $content);
if ($edit)
{
if ($manifest ?? null)
{
if (
!isset($manifest['requiredUserAction']) &&
$this->runtimeRequiredUserAction
)
{
$manifest['requiredUserAction'] = $this->runtimeRequiredUserAction;
}
$sections = (array)($manifest['block']['section'] ?? null);
$designerRepository = $this->metaData['DESIGNER_MODE'] ? BitrixLandingBlockDesigner::getRepository() : [];
$anchor = $this->anchor;
if (!$anchor)
{
$anchor = $this->parentId
? 'block' . $this->parentId
: 'b' . $this->id;
}
$autoPublicationEnabled = SiteType::isPublicScope() && CUserOptions::getOption('landing', 'auto_publication', 'Y') === 'Y';
echo '';
}
$content = $this::replaceMetaMarkers($content);
$event = new BitrixMainEvent('landing', 'onBlockEditView', [
'block' => $this,
'outputContent' => $content
]);
$event->send();
foreach ($event->getResults() as $result)
{
$content = $result->getParameters();
}
if ($this->repoId)
{
echo $content;
}
else
{
try
{
eval('?>' . $content . '');
}
catch (ParseError $e)
{
$errMessage = $this::getMessageBlock([
'MESSAGE' => Loc::getMessage('LANDING_BLOCK_MESSAGE_ERROR_EVAL')
]);
if ($params['wrapper_show'])
{
echo '' .
$errMessage .
'
';
}
else
{
echo $errMessage;
}
}
}
}
elseif ($this->active || $params['force_unactive'])
{
// @todo make better
static $sysPagesSites = [];
if (!array_key_exists($this->siteId, $sysPagesSites))
{
$sysPages = array();
foreach (Syspage::get($this->siteId) as $syspage)
{
$sysPages['@#system_' . $syspage['TYPE'] . '@'] = $syspage['LANDING_ID'];
}
// for main page we should get current site main page
if (!isset($sysPages['@#system_mainpage@']))
{
$currentSite = $this->getSite();
if ($currentSite['LANDING_ID_INDEX'])
{
$sysPages['@#system_mainpage@'] = $currentSite['LANDING_ID_INDEX'];
}
}
if (!empty($sysPages))
{
$urls = $landing->getPublicUrl($sysPages);
foreach ($sysPages as $code => $lid)
{
if (isset($urls[$lid]))
{
$sysPages[$code] = htmlspecialcharsbx($urls[$lid]);
}
else
{
unset($sysPages[$code]);
}
}
}
$sysPagesSites[$this->siteId] = $sysPages;
}
$sysPages = $sysPagesSites[$this->siteId];
if (!ConnectorMobile::isMobileHit())
{
$sysPages['@' . ConnectorDisk::FILE_MASK_HREF . '@i'] = str_replace(
'#fileId#', '$2',
ControllerDiskFile::getDownloadLink($this->metaData['SITE_TYPE'], $this->id)
);
}
if (!empty($sysPages))
{
$content = preg_replace(
array_keys($sysPages),
array_values($sysPages),
$content
);
}
$event = new BitrixMainEvent('landing', 'onBlockPublicView', [
'block' => $this,
'outputContent' => $content
]);
$event->send();
foreach ($event->getResults() as $result)
{
$content = $result->getParameters();
}
if ($this->repoId)
{
echo $content;
}
else
{
try
{
eval('?>' . $content . '');
}
catch (ParseError $e)
{
}
}
}
AssetsPreProcessing::blockViewProcessing($this, $edit);
}