• Модуль: main
  • Путь к файлу: ~/bitrix/modules/main/lib/composite/engine.php
  • Класс: BitrixMainCompositeEngine
  • Вызов: Engine::startBuffering
static function startBuffering($content)
{
	if (!self::isEnabled() || !is_object($GLOBALS["APPLICATION"]) || !self::$isCompositeInjected)
	{
		return null;
	}

	if (defined("BX_BUFFER_SHUTDOWN") || !defined("B_EPILOG_INCLUDED"))
	{
		Logger::log(
			array(
				"TYPE" => Logger::TYPE_PHP_SHUTDOWN,
			)
		);

		return null;
	}

	$newBuffer = $GLOBALS["APPLICATION"]->buffer_content;
	$cnt = count($GLOBALS["APPLICATION"]->buffer_content_type);

	Asset::getInstance()->setMode(AssetMode::COMPOSITE);

	self::$isCompositeInjected = false; //double-check
	for ($i = 0; $i < $cnt; $i++)
	{
		$method = $GLOBALS["APPLICATION"]->buffer_content_type[$i]["F"];
		if (!is_array($method) || count($method) !== 2 || $method[0] !== $GLOBALS["APPLICATION"])
		{
			continue;
		}

		if (in_array($method[1], array("GetCSS", "GetHeadScripts", "GetHeadStrings")))
		{
			$newBuffer[$i * 2 + 1] = call_user_func_array(
				$method,
				$GLOBALS["APPLICATION"]->buffer_content_type[$i]["P"]
			);
			if (self::$isCompositeInjected !== true && $method[1] === "GetHeadStrings")
			{
				self::$isCompositeInjected =
					strpos($newBuffer[$i * 2 + 1], "w.frameRequestStart") !== false;
			}
		}
	}

	Asset::getInstance()->setMode(AssetMode::STANDARD);

	if (!self::$isCompositeInjected)
	{
		Logger::log(
			array(
				"TYPE" => Logger::TYPE_COMPOSITE_NOT_INJECTED,
			)
		);
	}

	return self::$isCompositeInjected ? implode("", $newBuffer).$content : null;
}