Хитрощі при роботі з компонентами бітрікс

Два різних види кешування в компонентах

У більшості стандартних компонентів бітрікс використовується одночасно кешування масиву $ 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 для запису значення

Схожі статті