Если у вас возникли какие либо вопросы которые вы не смогли решить по нашим публикациям самостоятельно,
то ждем ваше обращение в нашей службе тех поддержки.
Назад в раздел
то ждем ваше обращение в нашей службе тех поддержки.
С помощью файла component_epilog
Универсальный способ исключения шаблона компонента из кэша
Часто возникают задачи, которым мешает кэширование шаблонов компонентов. Но только ради исключения шаблона из кэша не хочется кастомизировать компонент и от кэширования результата компонента отказываться тоже не хочется. Самый распространенный пример – голосование за элементы инфоблоков в списках или вывод рекламы.
Идея решения проста: переместить шаблон компонента в эпилог компонента:
- Скопировать шаблон компонента в адресное пространство шаблона сайта.
- В папке шаблона компонента создать файл component_epilog.php и полностью скопировать в него код из файла шаблона template.php. Затем в самом верху component_epilog.php сразу после проверки подключения эпилога ядра
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
перед началом непосредственно самого кода шаблона нужно добавить такой код:<? // заменяем $arResult эпилога значением, сохраненным в шаблоне if(isset($arResult['arResult'])) { $arResult =& $arResult['arResult']; // подключаем языковой файл global $MESS; include_once(GetLangFileName(dirname(__FILE__).'/lang/', '/template.php')); } else { return; } ?>
- Полностью очистить файл template.php и добавить такой код:
<?if(!defined('B_PROLOG_INCLUDED')||B_PROLOG_INCLUDED!==true)die(); ?> // добавляем к кэшируемому результату $arResult if(property_exists($component, 'arResultCacheKeys')) { if(!is_array($component->arResultCacheKeys)) { $component->arResultCacheKeys = array(); } $sVarName = 'arResult'; $component->arResultCacheKeys[] = $sVarName; $component->arResult[$sVarName] = $$sVarName; }
Теперь результат компонента кэшируется, а шаблон – нет.
Недостатки этого способа:
- Увеличение размера кэша. С размером кэша можно бороться путем включения в кэш только необходимых данных
- Шаблон все же постоянно генерирует html-код, что медленнее, чем вывод уже готового, ранее сформированного html-кода.
Примечание: если в компоненте используются методы CBitrixComponent::InitComponentTemplate и CBitrixComponent::ShowComponentTemplate, то такой компонент не подключает component_epilog.php. Например: bitrix:search.page.
Назад в раздел
Подписаться на новые материалы раздела: