Чистка кеша компонента бітрікс за подією, bitrix

Уявімо таку ситуацію: компонент календар (наприклад) коштує в декількох місцях з різними шаблонами (візьмемо 2 шаблони). У шаблоні компонента повинен виводитися список, що випадає, який би містив всіх користувачів. Користувачів ми отримаємо за допомогою api бітрікс в файлі result_modifier.php шаблону компонента календар. Але в майбутньому користувачів буде не мало, тому варто закеширувати список select з користувачами, щоб при кожному зверненні до сторінки з компонентом календар не робити дорогих запитів до бази даних.

При такій реалізації виникає проблема - при зміні списку користувачів або даних вже існуючих користувачів в випадаючому списку вони зміняться тільки після того, як відбудеться оновлення кеша, тобто коли закінчиться його термін.

Кеш компонентів бітрікс зберігається в папці / bitrix / cache / s1 / bitrix / components.
Де s1 - ідентифікатор сайту, bitrix (у другому випадку) - простір імен. Для стандартних компонентів це bitrix, для скопійованих - своє ім'я папки. Далі йде назва компонента, в нашому випадку news.calendar, і в ньому папки з випадковим назвою - там міститься кеш шаблонів. Кожна папка для окремого шаблону.

Нам потрібно повісити видалення кеша компонента news.calendar на події

  • OnAfterUserAdd - додавання користувача
  • OnAfterUserUpdate - оновлення даних користувача
  • OnUserDelete - видалення користувача

Для цього в файлі /bitrix/php_interface/init.php потрібно додати код

BXClearCache - функція, яка видаляє кеш. Перший параметр - видаляти чи кеш повністю (true або false). Другий - шлях до папки з кешем щодо / bitrix / cache.