Не Битриксом единым…
Когда я начинал свою карьеру веб-разработчика, на многих моих проектах использовалась CMS 1С-Битрикс. Можно долго спорить о ее достоинствах и недостатках, но факт остается фактом: Битрикс продолжает удерживать лидирующие позиции среди коммерческих CMS в рунете.
Но время шло, уровень задач неуклонно возрастал, и однажды я познакомился с платформой, которая определила мои дальнейшие технологические предпочтения и, во многом, сформировала подход к веб-разработке. Речь идет о замечательном фреймворке Symfony2 и всей окружающей инфраструктуре. В частности, одним из наиболее привлекательных инструментов из мира Symfony я считаю Twig — очень красивый, удобный, лаконичный, а главное, неограниченно расширяемый шаблонизатор вывода.
И вот, некоторое время назад, коллеги попросили меня помочь с разработкой одного небольшого, но интересного Битрикс-проекта. Я воспринял это как возможность посмотреть на свой прошлый опыт с новой точки зрения, применить накопленные знания и навыки в несколько ином контексте.
Первая проблема, с которой я столкнулся — то, что я напрочь отвык писать шаблоны вывода на PHP. Обилие символов “<?php … ?>” и языковых конструкций, не способствующих лаконичности кода, просто удручало. И я подумал — а почему бы не использовать любимый Twig для создания шаблонов? Тем более, Битрикс из коробки позволяет “прикручивать” сторонние шаблонизаторы.
Рецепт счастья
Сказано — сделано. Технически задача не представляла особенной сложности — достаточно было аккуратно выполнить несколько простых шагов:
-
Подключить к проекту библиотеку Twig и зарегистририровать встроенный autoloader;
-
Настроить конфигурацию шаблонизатора: путь к хранилищу кэша шаблонов, список используемых расширений и ряд других параметров;
-
Реализовать функцию, вызываемую Битриксом при подключении шаблона, аккуратно пробросив весь контекст шаблона ($arResult, $arParams и т.п.) в Twig;
-
И, наконец, зарегистрировать получившуюся функцию в глобальном массиве Битрикса $asCustomTemplateEngines, указав расширение файлов шаблонов — twig.
Вуаля! Теперь вместо template.php я мог использовать template.twig и радоваться чистому и лаконичному коду.
Но, конечно, идеальных сценариев интеграции программных систем не бывает, и пришлось разобраться с некоторыми проблемами и выполнить ряд доработок.
Во-первых, зачастую в шаблонах компонентов Битрикса приходится использовать некоторые битриксовые функции, а также глобальные объекты (что поделать, издержки архитектуры CMS). Поэтому было разработано небольшое расширение Twig, состоящее из набора глобальных переменных, функций и фильтров, предоставляющих доступ к API Битрикса в шаблонах. К счастью, как я уже упоминал, Twig предоставляет потрясающие возможности для расширения, так что все получилось просто и красиво. При этом мы постарались оставить доступным минимальный набор API, чтобы оградить разработчиков от желания реализовывать бизнес-логику в шаблонах. Это, кстати, еще одно преимущество Twig-шаблонизации: набор инструментов Twig заточен исключительно для решения задач вывода информации, что способствует хорошему разделению логики и представления в проекте.
В-вторых, возникли сложности с component_epilog.php (а куда же без них?). Оказывается, эпилог компонента автоматически подключается в ядре Битрикса только при обработке PHP-шаблонов. Пришлось позаботиться о его подключении для шаблонов Twig.
Ну и, наконец, некоторое время понадобилось для осознания того факта, что языковой файл шаблона template.twig также должен иметь имя template.twig, хотя он остается обычным PHP-файлом с языковыми константами.
Reuse this!
Что ж, проект был успешно доведен до конца, механизм Twig-шаблонизации для Битрикса был презентован внутри компании. Коллеги сначала отнеслись к нему настороженно, но затем попробовали, разобрались и стали просить консультации по использованию Twig в своих проектах. Тогда и возникла идея: реализовать модуль для Битрикса, который бы инкапсулировал детали подключения шаблонизатора.
Мои коллеги, специализирующиеся на Битрикс-разработке, успешно собрали имеющийся функционал в формат модуля, немного подшлифовали код и опубликовали на Bitrix Marketplace под забавным именем Твигрикс.
Модуль абсолютно бесплатен и доступен для скачивания всем интересующимся. А исходный код доступен на нашем гитхабе. Надеемся, что Твигрикс немного украсит суровые будни суровых битрикс-разработчиков.