Всем добрый день! Нужно Формировать композитный КЕШ в зависимости от куки. Нашел интересную статью по этому поводу -
https://github.com/studiofact/wiki-bit...1%82%D1%8B Полазил по форумам и и помог комментарий
https://dev.1c-bitrix.ru/community/web...#com116715 В итоге получился рабочий вариант. Подключил класс в 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();
}
}
Создал файл
/local/php_interface/composite_first_start_cookie_fix.php для записи куки и вызываю
ДО подключения хедера. Его содержимое:
if ($_GET["new_header"] == "Y") {
$_COOKIE["BITRIX_SM_DESIGN_30"] = "Y";
setcookie("BITRIX_SM_DESIGN_30", "Y", time() + (3600 * 24 * 30), "/");
}
Далее воспользовался событием
OnGetStaticCacheProvider $eventManager = \Bitrix\Main\EventManager::getInstance();
$eventManager->addEventHandler("main", "OnGetStaticCacheProvider", array(
"\\Project\\BitrixExtends\\CacheProvider",
"setCustomUserPrivateKey"
));
Всем спасибо!