• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/composite/engine.php
  • Класс: BitrixMainCompositeEngine
  • Вызов: Engine::getDividedPageData
static function getDividedPageData($content)
{
	$data = array(
		"dynamic" => array(),
		"static" => "",
		"md5" => "",
	);

	$dynamicAreas = StaticArea::getDynamicAreas();
	if (!empty($dynamicAreas) && ($areas = self::getFrameIndexes($content)) !== false)
	{
		$offset = 0;
		$pageBlocks = self::getPageBlocks();
		foreach ($areas as $area)
		{
			$dynamicArea = StaticArea::getDynamicArea($area->id);
			if ($dynamicArea === null)
			{
				continue;
			}

			$realId = $dynamicArea->getContainerId() !== null ? $dynamicArea->getContainerId() : "bxdynamic_".$area->id;
			$assets =  Asset::getInstance()->getAssetInfo($dynamicArea->getAssetId(), $dynamicArea->getAssetMode());
			$areaContent = substr($content, $area->openTagEnd, $area->closingTagStart - $area->openTagEnd);
			$areaContentMd5 = substr(md5($areaContent), 0, 12);

			$blockId = $dynamicArea->getId();
			$hasSameContent = isset($pageBlocks[$blockId]) && $pageBlocks[$blockId] === $areaContentMd5;

			if (!$hasSameContent)
			{
				$data["dynamic"][] = array(
					"ID" => $realId,
					"CONTENT" => $areaContent,
					"HASH" => $areaContentMd5,
					"PROPS" => array(
						"ID" => $area->id,
						"CONTAINER_ID" => $dynamicArea->getContainerId(),
						"USE_BROWSER_STORAGE" => $dynamicArea->getBrowserStorage(),
						"AUTO_UPDATE" => $dynamicArea->getAutoUpdate(),
						"USE_ANIMATION" => $dynamicArea->getAnimation(),
						"CSS" => $assets["CSS"],
						"JS" => $assets["JS"],
						"BUNDLE_JS" => $assets["BUNDLE_JS"],
						"BUNDLE_CSS" => $assets["BUNDLE_CSS"],
						"STRINGS" => $assets["STRINGS"],
					),
				);
			}

			$data["static"] .= substr($content, $offset, $area->openTagStart - $offset);

			if ($dynamicArea->getContainerId() === null)
			{
				$data["static"] .=
					''.
					$dynamicArea->getStub().
					'';
			}
			else
			{
				$data["static"] .= $dynamicArea->getStub();
			}

			$offset = $area->closingTagEnd;
		}

		$data["static"] .= substr($content, $offset);
	}
	else
	{
		$data["static"] = $content;
	}

	self::replaceSessid($data["static"]);
	Asset::getInstance()->moveJsToBody($data["static"]);

	$data["md5"] = md5($data["static"]);

	return $data;
}