Кастомизация шаблонов в коробке Битрикс24 без потери обновлений
В своей работе мы ежедневно используем Битрикс24 для ведения задач и взаимодействия с клиентами. Многие опции платформы пришлось перепилить под себя, и, как часто бывает, без сюрпризов тут не обошлось.
Что мы хотели?
Адаптировать интерфейс коробки, чтобы спрятать от клиентов внутренние, не касающиеся его процессы. А именно скрыть элементы (кнопки, блоки) для внешних пользователей (Extranet) или добавить новые компоненты (например, комментарии для клиентов).
Почему нельзя просто править шаблоны?
Потому что после очередного обновления Битрикс24 все изменения в шаблонах и файлах ядра исчезнут. Такой подход быстро превращается в боль.
Как сделали мы:
Вместо правки шаблонов мы пошли другим путем — начали перехватывать уже готовый HTML-вывод и модифицировать его программно.
Технически это реализовано так:
Используем событие OnEndBufferContent, которое срабатывает, когда HTML уже сформирован, но еще не отправлен пользователю.
Подключаем Symfony DomCrawler, чтобы безопасно работать с DOM-структурой и менять ее на лету.
Что можно делать в этом подходе:
a) Безопасное удаление элементов:
Фильтрация по CSS-селекторам: Удаление блоков (например, .task-detail-extra, #pagetitle-menu) для Extranet-пользователей.
Пример кода:
b) Динамическое добавление компонентов:
Вставка кастомных вкладок:
Добавление блока комментариев для клиентов через IncludeComponent.
Интеграция без правки шаблонов:
Использование буфера для рендеринга компонента и замены плейсхолдеров.
c) Условная логика:
Проверка контекста: Обработка только специфичных URL (например, /tasks/task/view) и пользовательских типов (Extranet).
Пример кода:
Преимущества подхода:
- Сохранение обновлений: Оригинальные файлы остаются нетронутыми — кастомизация не конфликтует с новыми версиями Битрикс24
- Чистота кода: Логика изменений изолирована в отдельном классе, что упрощает поддержку
- Гибкость: Возможность тонкой настройки интерфейса для разных групп пользователей
Описанный подход позволяет адаптировать интерфейс под бизнес-задачи, не нарушая процессы обновления.
Подводные камни:
Зависимость от структуры DOM: Изменение классов или ID в новых версиях Битрикс24 может сломать функционал. Этого можно избежать регулярным тестированием после обновлений.
Производительность: Обработка больших HTML-буферов может замедлить отдачу страниц. Поможет оптимизация выборок в Crawler и кеширование.
Практические примеры:
a) Добавление вкладки комментариев для клиентов:
Динамический рендеринг компонента: Использование ob_start() и IncludeComponent для вставки bitrix:forum.comments.
Инструменты и библиотеки:
Symfony DomCrawler: Для парсинга и манипуляций с HTML.
И совет напоследок:
Всегда документируйте изменения и учитывайте обратную совместимость методов при обновлении Битрикс24.