Два різних види кешування в компонентах
У більшості стандартних компонентів бітрікс використовується одночасно кешування масиву $ arResult і html-коду. Однак при написанні власних компонентів це не завжди буває зручним, часто буває, що в шаблоні необхідно виконувати якийсь код на кожному хіті, тому кешувати краще тільки дані в $ arResult. Нижче я навів 2 приклади кешування (для component.php) - з кешуванням html-коду і без. Зверніть увагу, в другому варіанті підключення шаблону проводиться після блоку кешування, а його місце займає $ this-> EndResultCache ().
Кешування $ arResult і html-коду шаблону:
Кешування тільки $ arResult:
Додаємо дані до кешу з шаблону для використання в component_epilog.php
Component_epilog.php - це файл, який запускається після виведення шаблону, і не кешируєтся, тобто він запускається незалежно від того, був показаний щойно створений html-код з шаблону або висновок з кеша. Відповідно ми можемо використовувати цей файл для виконання якихось дій на кожному хіті, навіть, наприклад, виводити html-код вище на сторінці, використовуючи відкладені функції. Але дані, доступні в component_epilog.php, як правило досить обмежені в компонентах, які використовують html-кешування. В даному прикладі я покажу, як розширити перелік цих даних, для цього ми вставимо наступний код в файл result_modifier.php в шаблоні компонета (Для прикладу використовується ключ "ITEMS" в масиві $ arResult, що містить в компоненті "bitrix: news.list" основний масив даних):
Пишемо в $ arResult батьківського комплексного компонента з шаблону
Іноді в файлах шаблону комплексного компонента (які не мають свого кеша) зручно мати деякі дані з використовуваних в них звичайних (некомлексних) компонентів. Приклад: після підключення компонента catalog.section.list нам відповідно до структури html-коду, наданого верстальником, необхідно мати доступ до деяких полях розділу саме в шаблоні комплексного компонента. Щоб уникнути додаткових запитів до бази і пов'язаного з цим неминучого кешування, або повторного підключення компонента catalog.section.list, зробимо так:
Додамо до кешу компонента всі необхідні дані, наприклад, використовуємо файл result_modifier.php щоб додати масив $ arResult # 91; "SECTION" # 93;
У файлі component_epilog.php отримаємо об'єкт батьківського компонента, якщо він доступний, і скористаємося його властивістю arResult для запису значення