- Модуль: 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;
}