Всем добрый день! Нужно Формировать композитный КЕШ в зависимости от куки. Нашел интересную статью по этому поводу -
Полазил по форумам и и помог комментарий
В итоге получился рабочий вариант. Подключил класс в init.php
Создал файл /local/php_interface/composite_first_start_cookie_fix.php для записи куки и вызываю ДО подключения хедера. Его содержимое:
Далее воспользовался событием OnGetStaticCacheProvider
Всем спасибо!
Полазил по форумам и и помог комментарий
В итоге получился рабочий вариант. Подключил класс в init.php
namespace Project\BitrixExtends;
class CacheProvider extends \Bitrix\Main\Data\StaticCacheProvider
{
/**
* @return string
*/
public function getCachePrivateKey()
{
return self::getCachePrefix();
}
/**
*
*/
public function setUserPrivateKey()
{
\CHTMLPagesCache::setUserPrivateKey(self::getCachePrefix(), 0);
}
/**
* @return bool
*/
public function isCacheable()
{
return true;
}
/**
*
*/
public function onBeforeEndBufferContent()
{
}
/**
* @return string
*/
public static function getCachePrefix()
{
global $APPLICATION;
return ($APPLICATION->get_cookie("DESIGN_30") == "Y") ? 'standart' : 'design30';
}
/**
* Установить Ключ КЕШа с учетом Куки дизайна.
*
* @return CacheProvider
*/
public static function setCustomUserPrivateKey()
{
\CHTMLPagesCache::setUserPrivateKey(self::getCachePrefix(), 0);
return new self();
}
} |
if ($_GET["new_header"] == "Y") {
$_COOKIE["BITRIX_SM_DESIGN_30"] = "Y";
setcookie("BITRIX_SM_DESIGN_30", "Y", time() + (3600 * 24 * 30), "/");
} |
$eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("main", "OnGetStaticCacheProvider", array(
"\\Project\\BitrixExtends\\CacheProvider",
"setCustomUserPrivateKey"
)); |