Всем привет!
Столкнулся вот с какой проблемой. Изучаю как работает кеширование в битриксе, а именно кеширование в компонентах. Изучаю методы класса CPHPCache.
Пробовал сделать свой компонент на старом ядре, вот по этому видео:
https://www.youtube.com/watch?v=uMaoEDtuUOQ&t=271s
Вот код файла component.php моего компонента:
Вот код шаблона:
Вот код файла стилей style.css:
Вот вызов компонента:
Кода на админ панели жму кнопку "Сбросить кеш" - то файл стилей применяется к шаблону, и у блока с классом test появляется синяя рамка, как и описано в файле стилей.
Но вот когда из адресной строки браузера я убираю параметр clear_cache=Y - то почему то рамка пропадает. Из этого я сделал вывод, что в кеш файл стилей не попадает.
Подскажите кто-нибудь, в чём может быть дело? Я смотрел файл кеша, и там в templateCachedData есть путь до моего css файла: /local/components/cache.old/templates/.default/style.css
Столкнулся вот с какой проблемой. Изучаю как работает кеширование в битриксе, а именно кеширование в компонентах. Изучаю методы класса CPHPCache.
Пробовал сделать свой компонент на старом ядре, вот по этому видео:
Вот код файла component.php моего компонента:
Код |
---|
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?> <? //Создаём объект класса CPHPCache $obCache = new CPHPCache(); //Устанавливаем время кеширования $cacheLifetime = $arParams["CACHE_TIME"]; //Создаём уникальный идентификатор кеша $cacheId = $arParams["IBLOCK_ID"].'_'.$arParams["ELEMENT_ID"]; //Директория хранения кеша $cachePath = "/cache_test/"; //Проверяем, есть ли файл кеша if($obCache->InitCache($cacheLifetime, $cacheId, $cachePath)){ echo 'Кеш есть'; $arVars = $obCache->GetVars(); $arResult = $arVars["arResult"]; $this->SetTemplateCachedData($arVars["templateCachedData"]); $obCache->Output(); }else{ echo 'Кеша нет'; //Начинаем буферизацию выводимого HTML if($obCache->StartDataCache()){ //Тут код, результат работы которого должен быть закеширован $arSelect = Array("ID", "IBLOCK_ID", "NAME", "PREVIEW_TEXT"); $arFilter = Array( "IBLOCK_ID" => $arParams["IBLOCK_ID"], "ID" => $arParams["ELEMENT_ID"], "ACTIVE_DATE" => "Y", "ACTIVE" => "Y" ); $res = CIBlockElement::GetList(Array(), $arFilter, false, false, $arSelect); while($arElement = $res->GetNext()){ $arResult = $arElement; } $this->includeComponentTemplate(); $templateCachedData = $this->getTemplateCachedData(); $obCache->EndDataCache( array( "arResult" => $arResult, "templateCachedData" => $templateCachedData ) ); } } ?> |
Вот код шаблона:
Код |
---|
<? if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); ?> <div class="test"> <b><?=$arResult["NAME"]?></b><br/><br/><br/> <?=$arResult["PREVIEW_TEXT"]?> </div> <? echo '<pre>'; print_r($arResult); echo '</pre>'; ?> |
Вот код файла стилей style.css:
Код |
---|
.test{ border: 1px solid blue; } |
Вот вызов компонента:
Код |
---|
<?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/header.php"); $APPLICATION->SetTitle("Тестим кеширование в Битрикс"); ?> <? $APPLICATION->IncludeComponent( 'cache.old', '.default', [ "IBLOCK_ID"=>1, "ELEMENT_ID" => 3, "CACHE_TIME" => 864000 ] ); ?> <?require($_SERVER["DOCUMENT_ROOT"]."/bitrix/footer.php");?> |
Кода на админ панели жму кнопку "Сбросить кеш" - то файл стилей применяется к шаблону, и у блока с классом test появляется синяя рамка, как и описано в файле стилей.
Но вот когда из адресной строки браузера я убираю параметр clear_cache=Y - то почему то рамка пропадает. Из этого я сделал вывод, что в кеш файл стилей не попадает.
Подскажите кто-нибудь, в чём может быть дело? Я смотрел файл кеша, и там в templateCachedData есть путь до моего css файла: /local/components/cache.old/templates/.default/style.css