Всем привет!
Столкнулся вот с какой проблемой. Изучаю как работает кеширование в битриксе, а именно кеширование в компонентах. Изучаю методы класса CPHPCache.
Пробовал сделать свой компонент на старом ядре, вот по этому видео:
[URL=Ссылка]https://www.youtube.com/watch?v=uMaoEDtuUOQ&t=271s[/URL]
Вот код файла component.php моего компонента:
[CODE]<?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
)
);
}
}
?>[/CODE]
Вот код шаблона:
[CODE]<? 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>';
?>[/CODE]
Вот код файла стилей style.css:
[CODE].test{
border: 1px solid blue;
}[/CODE]
Вот вызов компонента:
[CODE]<?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");?>[/CODE]
Кода на админ панели жму кнопку "Сбросить кеш" - то файл стилей применяется к шаблону, и у блока с классом test появляется синяя рамка, как и описано в файле стилей.
Но вот когда из адресной строки браузера я убираю параметр clear_cache=Y - то почему то рамка пропадает. Из этого я сделал вывод, что в кеш файл стилей не попадает.
Подскажите кто-нибудь, в чём может быть дело? Я смотрел файл кеша, и там в templateCachedData есть путь до моего css файла: /local/components/cache.old/templates/.default/style.css
Столкнулся вот с какой проблемой. Изучаю как работает кеширование в битриксе, а именно кеширование в компонентах. Изучаю методы класса CPHPCache.
Пробовал сделать свой компонент на старом ядре, вот по этому видео:
[URL=Ссылка]https://www.youtube.com/watch?v=uMaoEDtuUOQ&t=271s[/URL]
Вот код файла component.php моего компонента:
[CODE]<?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
)
);
}
}
?>[/CODE]
Вот код шаблона:
[CODE]<? 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>';
?>[/CODE]
Вот код файла стилей style.css:
[CODE].test{
border: 1px solid blue;
}[/CODE]
Вот вызов компонента:
[CODE]<?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");?>[/CODE]
Кода на админ панели жму кнопку "Сбросить кеш" - то файл стилей применяется к шаблону, и у блока с классом test появляется синяя рамка, как и описано в файле стилей.
Но вот когда из адресной строки браузера я убираю параметр clear_cache=Y - то почему то рамка пропадает. Из этого я сделал вывод, что в кеш файл стилей не попадает.
Подскажите кто-нибудь, в чём может быть дело? Я смотрел файл кеша, и там в templateCachedData есть путь до моего css файла: /local/components/cache.old/templates/.default/style.css