РЕГИСТРАЦИЯ
Гость
Вход не выполнен.

Анонс: переход на Twig

Только интересные статьи
Категории раздела
3
378
Кто: modos189, Когда: , Куда: CSS

В Atom-M 6 на замену собственному шаблонизатору прийдёт шаблонизатор Twig - "компилирующий обработчик шаблонов с открытым исходным кодом, написанный на языке программирования PHP. Armin Ronacher написал Twig в 2008 году для платформы блогов Chyrp. Он больше не возвращался к разработке и в большей степени занимался разработкой на Python. Синтаксис языка шаблонов Twig берёт начало от движков шаблонов Jinja и Django, первый из которых также создан Ронакером. Идею данного шаблонизатора развивает и поддерживает Fabien Potencier, ведущий разработчик и идеолог фреймворка Symfony, в котором Twig используется по умолчанию." (https://ru.wikipedia.org/wiki/Twig).
Много воды утекло с того момента, когда наш движок имел совсем другое название и являлся проприетарным продуктом, но скорее всего наш шаблонизатор был основан на старой версии Twig, код которого был сильно переработан для поддержки шаблонов и работы в стиле ещё более старого шаблонизатора, написанного под впечатлением от Smarty, но это только догадки.

Почему Twig? Во-первых, он более безопасный. Ранее в шаблонах сплошь и рядом выводились неочищенные данные и это в принципе понятно, так как верстальщик не должен следить за работой программиста, который банально мог забыть пропустить данные из форм через check_plain(). В шаблонах же Atom-M 6 переменные будут по-умолчанию экранироваться. Кроме того, шаблонизатор Twig постоянно исправляется и улучшается. В репозитории Twig на github более 200 соавторов, поэтому замена собственного шаблонизатора на Twig
облегчит работу над поддержкой движка и даст возможность больше сосредоточиться над доведением до ума прочих компонентов.

Во-вторых, в Twig есть очень интересная особенность - наследование шаблонов. Теперь достаточно создать базовый родительский шаблон и затем при создании дочернего шаблона в теге extends указать родительский шаблон. К примеру чтобы создать дочерний шаблон ноды нужно в нем прописать:



{% extends "node.html.twig" %}

Рассмотрим наследование на примере шаблонов для блока. Базовый родительский шаблон для блока block.html.twig содержит примерно такой код

<div>
  {% if atm.entity.title %}
    <h2{{ atm.title_attributes }}>{{ atm.title }}</h2>
  {% endif %}
  <hr>
  {% block content %}
    <div>
      {{ atm.main_text | raw }}
    </div>
  {% endblock %}
</div>

При этом содержимое тега block можно в дочернем шаблоне переписать. Рассмотрим код шаблона для блока с формой поиска block--search-form-block.html.twig

{% extends "block.html.twig" %}
{% block content %}
  <div>
    {{ parent() }}
  </div>
{% endblock %}

Дочерний шаблон будет содержать всю разметку block.html.twig за исключением переписанного содержимого внутри тега block:

{% block content %}{% endblock %}

В-третьих, наконец, кроме множества полезных функций и фильтров Twig, в нём исправно работает кэш, который у нас отключен из-за проблем в шаблонизаторе и куда ни кто не хочет лезть.

Несмотря на то, что наш шаблонизатор и Twig довольно похожи, потребуется произвести обновление шаблонов под Twig. Для помощи в этом был подготовлен скрипт retwig.php, берущий на себя основную часть работы, но всё-равно потребуется вручную просмотреть файлы и исправить там, где скрипт не справился.

Основные изменения:
Для доступа к меткам и функциям Atom-M используется префикс atm (например, {{ atm.title }} вместо {{ title }} ). К файлам, обрабатывающимся Twig добавлен постфикс .twig (например, main.html.twig вместо main.html).(о причинах введения этих изменений написал в комментарии к коммиту).
Метки, которые должны возвращать html должны выводиться с фильтром raw, например. {{ atm.content | raw }}
Кроме того, вместо используемых ранее php функций предлагается использовать фильтры Twig. Например, вместо mb_strtolower() - фильтр lower, а вместо str_replace() - фильтр replace.

Что касается производительности, скорость обработки страниц на уровне нашего шаблонизатора, а если использовать кэширование, то ещё быстрее. Многие крутые проекты используют Twig в своих шаблонах, поэтому легче научиться работать с этим шаблонизатором, а также портировать шаблоны. А для тех, кто уже использует Twig, проще внести вклад в разработку нашего движка.

Ну а пока Atom-M 6 не вышла, рекомендую почитать документацию по Twig на официальном сайте или множестве русскоязычных сайтов. Протестировать работу нового шаблонизатора можно в соответствующей ветке репозитория. На момент написания статьи новый шаблонизатор не поддерживает сниппеты и плагины, так что осторожнее.


Прикрепленные файлы:
У вас нет прав для скачивания прикрепленных файлов
Комментарии:
  • User avatar

    MAX555

    А когда он примерно будет новый шаблонизатор  поддерживать сниппеты и плагины? 

    Дата отправления:
  • User avatar

    modos189

    Как раз сегодня добавил поддержку плагинов, к тому же теперь рекомендуется разрабатывать плагины, которые возвращают в результате своей работы не готовый html код, который трудно изменять разработчикам плагинов, а массив данных, которые обрабатываются в подключенном файле шаблона плагина, либо своём варианте файла, но об этом позже напишу.

    Дата отправления:
  • User avatar

    modos189

    Дата отправления: