/** * OnEndBufferContent handler * There are two variants of content's modification in this method. * The first one: * If it's ajax-hit the content will be replaced by json data with dynamic blocks, * javascript files and etc. - dynamic part * * The second one: * If it's simple hit the content will be modified also, * all dynamic blocks will be cutted out of the content - static part. * * @param $content */ public function onEndBufferContent(&$content) { global $APPLICATION; $dividedData = self::getInstance()->getDividedPageData($content); $htmlCacheChanged = false; if (self::getUseHTMLCache()) { $staticHTMLCache = \Bitrix\Main\Data\StaticHtmlCache::getInstance(); if ($staticHTMLCache->isCacheable()) { if (!$staticHTMLCache->isExists() || $staticHTMLCache->getSubstring(-35, 32) !== $dividedData["md5"]) { $staticHTMLCache->delete(); $staticHTMLCache->write($dividedData["static"] . "<!--" . $dividedData["md5"] . "-->"); } $frame = self::getInstance(); $ids = $frame->getDynamicIDs(); foreach ($ids as $i => $id) { if (isset($frame->containers[$id])) { unset($ids[$i]); } } $dividedData["static"] = preg_replace(array('/<!--\'start_frame_cache_(' . implode("|", $ids) . ')\'-->/', '/<!--\'end_frame_cache_(' . implode("|", $ids) . ')\'-->/'), array('<div id="bxdynamic_\\1">', '</div>'), $content); if ($frame->injectedJS) { if (isset($frame->injectedJS["start"])) { $dividedData["static"] = str_replace($frame->injectedJS["start"], "", $dividedData["static"]); } } } elseif (!$staticHTMLCache->isCacheable()) { $staticHTMLCache->delete(); return; } } if (self::getUseAppCache() == true) { \Bitrix\Main\Data\AppCacheManifest::getInstance()->generate($dividedData["static"]); } else { \Bitrix\Main\Data\AppCacheManifest::checkObsoleteManifest(); } if (self::isAjaxRequest()) { header("Content-Type: application/x-javascript; charset=" . SITE_CHARSET); $content = array("js" => $APPLICATION->arHeadScripts, "additional_js" => $APPLICATION->arAdditionalJS, "lang" => \CJSCore::GetCoreMessages(), "css" => $APPLICATION->GetCSSArray(), "htmlCacheChanged" => $htmlCacheChanged, "isManifestUpdated" => \Bitrix\Main\Data\AppCacheManifest::getInstance()->getIsModified(), "dynamicBlocks" => $dividedData["dynamic"], "spread" => array_map(array("CUtil", "JSEscape"), $APPLICATION->GetSpreadCookieUrls())); $content = \CUtil::PhpToJSObject($content); } else { $content = $dividedData["static"]; } }
/** * * There are two variants of content's modification in this method. * The first one: * If it's ajax-hit the content will be replaced by json data with dynamic blocks, * javascript files and etc. - dynamic part * * The second one: * If it's simple hit the content will be modified also, * all dynamic blocks will be cutted out of the content - static part. * * @param string $content Html page content. * * @return string */ public function processPageContent($content) { global $APPLICATION; $dividedData = $this->getDividedPageData($content); $htmlCacheChanged = false; if (self::getUseHTMLCache()) { $isLicenseExpired = self::isLicenseExpired(); $staticHTMLCache = StaticHtmlCache::getInstance(); if ($staticHTMLCache->isCacheable()) { $cacheExists = $staticHTMLCache->exists(); if ((!$cacheExists || $staticHTMLCache->getMd5() !== $dividedData["md5"]) && !\CHTMLPagesCache::isIE9()) { if ($cacheExists) { $staticHTMLCache->delete(); } if (!$isLicenseExpired) { $success = $staticHTMLCache->write($dividedData["static"], $dividedData["md5"]); if ($success) { $htmlCacheChanged = true; $staticHTMLCache->setUserPrivateKey(); } } } else { if ($isLicenseExpired) { $staticHTMLCache->delete(); } } $dividedData["static"] = $this->replaceInjections($content); } else { $staticHTMLCache->delete(); return $this->getAjaxError("not_cacheable"); } } if (self::getUseAppCache() == true) { AppCacheManifest::getInstance()->generate($dividedData["static"]); } else { AppCacheManifest::checkObsoleteManifest(); } if (self::isAjaxRequest()) { self::sendRandHeader(); header("Content-Type: application/x-javascript; charset=" . SITE_CHARSET); header("X-Bitrix-Composite: Ajax " . ($htmlCacheChanged ? "(changed)" : "(stable)")); $content = array("js" => $APPLICATION->arHeadScripts, "additional_js" => $APPLICATION->arAdditionalJS, "lang" => \CJSCore::GetCoreMessages(), "css" => $APPLICATION->GetCSSArray(), "htmlCacheChanged" => $htmlCacheChanged, "isManifestUpdated" => AppCacheManifest::getInstance()->getIsModified(), "dynamicBlocks" => $dividedData["dynamic"], "spread" => array_map(array("CUtil", "JSEscape"), $APPLICATION->GetSpreadCookieUrls())); $content = \CUtil::PhpToJSObject($content); } else { $content = $dividedData["static"]; } return $content; }
<?php define("NO_KEEP_STATISTIC", true); define("NOT_CHECK_FILE_PERMISSIONS", true); require_once $_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"; header("Content-Type: application/x-javascript; charset=" . LANG_CHARSET); echo CUtil::PhpToJSObject(CJSCore::GetCoreMessages()); die;