Exile
Administrator
Привет.
Это первая статья из обещанной сервии, в рамках которой мы будем рассказывать о том, что появится в новой мажорной версии проекта.
Сегодня поговорим об одном из главных изменений - мы полностью переработали систему шаблонов.
Это наследие phpBB2 и его шаблонизатора eXtreme Styles. Старый шаблонизатор верой и правдой служил проекту много лет, но у него есть одна большая проблема - документации по нему практически нет. Не так давно появилась, но мы ее делали как раз в рамках ресерча для переписывания. Если вы хотели что-то изменить в существующем или написать свой шаблон, приходилось разбираться методом проб и ошибок или искать древние статьи с форумов phpBB.
Теперь тот же код можно написать так:
Вы можете сказать, что изменения невелики, но это один из самых простых примеров, есть куда более сложные, где можно выкинуть огромное количество логики на бэкенде, например легко формируя большие блоки сразу в шаблоне. Для вас же основное отличие в том, что шаблоны на Twig поддерживаются во множестве IDE, и у вас уже "из коробки" есть огромное количество различных модификаторов чтобы какие-то изменения можно было делать автоматически в шаблонах, а не в PHP-коде.
При этом, у вас появляется появляется выбор:
Это первая статья из обещанной сервии, в рамках которой мы будем рассказывать о том, что появится в новой мажорной версии проекта.
Сегодня поговорим об одном из главных изменений - мы полностью переработали систему шаблонов.
Что было
Если вы когда-нибудь заглядывали в шаблоны TorrentPier, то наверняка видели такой синтаксис:
HTML:
<!-- IF TERMS_HTML -->
<tr>
<td class="row1">
<div class="post_wrap">
{TERMS_HTML}
</div>
</td>
</tr>
<!-- ENDIF -->
<!-- IF IS_ADMIN -->
<tr>
<td class="row1">
{TERMS_EDIT}
</td>
</tr>
<!-- ENDIF -->
Что стало
В версии 3.0 мы заменили этот движок на Twig - современный шаблонизатор от создателей Symfony. Это один из самых популярных инструментов в мире PHP, используется в тысячах проектов, и по нему есть море материалов на любом языке.Теперь тот же код можно написать так:
HTML:
{% if TERMS_HTML %}
<tr>
<td class="row1">
<div class="post_wrap">
{{ TERMS_HTML|raw }}
</div>
</td>
</tr>
{% endif %}
{% if IS_ADMIN %}
<tr>
<td class="row1">
{{ TERMS_EDIT|raw }}
</td>
</tr>
{% endif %}
Главное - обратная совместимость
Ваши старые шаблоны продолжат работать как раньше. Мы написали конвертер, который автоматически преобразует старый синтаксис в Twig прямо на лету. Ничего переписывать не нужно - просто обновитесь, и все заработает. Ну или закиньте старый шаблон и он тоже будет работать.При этом, у вас появляется появляется выбор:
- Оставить старые шаблоны как есть
- Постепенно переписывать на Twig при доработках
- Писать новые шаблоны сразу на Twig
Что это дает
- Документация. Все есть на twig.symfony.com, плюс туториалы и примеры на любом другом языке
- Современные возможности. Наследование шаблонов, макросы, фильтры - все из коробки
- Кеширование. Скомпилированные шаблоны умно кешируются, повторный парсинг не нужен
- Отладка. В режиме разработчика появится debug-панель с информацией о загруженных шаблонах