0

Битрикс + Twig = Твигрикс

Дмитрий Кораблинов
5 марта 2014 года

Не Битриксом единым…

Когда я начинал свою карьеру веб-разработчика, на многих моих проектах использовалась 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 под забавным именем Твигрикс.

Модуль абсолютно бесплатен и доступен для скачивания всем интересующимся. А исходный код доступен на нашем гитхабе. Надеемся, что Твигрикс немного украсит суровые будни суровых битрикс-разработчиков.

 

Метки: , ,

Оставить комментарий