• Модуль: 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 .= '
' . $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 . ' 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 . '