Часто на форуме и блогах описывают задачи, которым мешает кэширование шаблонов компонентов, но только ради исключения шаблона из кэша не хочется кастомизировать компонент и от кэширования результата компонента отказываться тоже не хочется. Самый распространенный пример – голосование за элементы инфоблоков в списках или вывод рекламы. В этой заметке я опишу один из универсальных способов решения подобных задач с помощью эпилога компонента (component_epilog.php). [spoiler] Идея способа проста: переместить шаблон компонента в эпилог компонента.
Для этого нам понадобится проделать такие шаги:
1. Скопировать шаблон компонента в адресное пространство шаблона сайта. Как это делается описано в учебных курсах и руководствах.
2. В папке шаблона компонента создать файл component_epilog.php и полностью скопировать в него код из файла шаблона template.php. Затем в самом верху component_epilog.php сразу после проверки подключения эпилога ядра <?if(!defined("B_PROLOG_INCLUDED" || B_PROLOG_INCLUDED!==true)die();?> перед началом непосредственно самого кода шаблона нужно добавить такой код:
Все! Теперь результат компонента кэшируется, а шаблон – нет.
Есть, конечно, и недостатки у этого способа:
1. Увеличение размера кэша.
2. Шаблон все же постоянно генерирует html-код, что медленнее, чем вывод уже готового, ранее сформированного html-кода.
С размером кэша можно бороться путем включения в кэш только необходимых данных. Ну, а постоянная генерация html-кода шаблоном – это и есть наша задача, поэтому с ней мы бороться не будем
ммм..ни у кого не было после применения такого решения ошибки "CGI / FastCGI - обнаружена ошибка. Приложение будет закрыто"? и при выводе [arResult] в component_epilog.php пишет *RECURSION*, а в логах сервера ничегошеньки как побороть? =/
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».