a Sensio Labs Product

Гибкий, быстрый и безопасный
шаблонизатор для PHP

Вышел Twig 0.9.6

Я рад представить вам Twig 0.9.6. Это технический релиз, где исправлены некоторые ошибки и добавлено несколько новых особенностей. До того как выйдет Twig 1.0 осталось два основных тикета.

Кроме исправления ошибок и новых особенностей, есть два примечательных изменения внутри Twig (однако мало важные для пользователей библиотеки): для юнит-тестов используется PHPUnit и код оформлен в соответствии в стандартами PEAR .

Документация обновлена в соответствии со сделанными изменениями новой версии.

Дальше будет рассказано об основных изменениях, но если вы хотите знать все подробности – загляните в лог правок.

Обновление

Обратная совместимость соблюдена, обновление от 0.9.5 должно быть безопасным:

  • Установите новую версию (через PEAR, SVN, Git или скачав архив);
  • Удалите закэшированные шаблоны;
  • Проверьте работоспособность.

Исправленные ошибки

Мы исправили несколько ошибок, основные из них:

  • исправлен баг Lexer, когда шаблон имел слишком много текста между или в блоке;
  • исправлен баг Lexer, когда mbstring.func_overload использовалась вместе с mbstring.internal_encoding для кодировок отличных от ASCII;
  • исправлен баг разбора узлов для макросов (теперь макросы разбираются как любой другой узел);
  • исправлен баг – переменные определялись снаружи цикла и получали новое значение в цикле.

Новые особенности

Расширение i18n

Благодаря расширению i18n вы можете использовать различные языки в шаблонах. Это расширение работает только если подключено расширение PHP gettext.

Используйте тэг trans для того, чтобы отметить какая часть шаблона должна быть переведена:

{% trans %}
Hello World!
{% endtrans %}

Вы можете использовать внутри переменные, если это необходимо:

{% trans %}
Hello {{ name }}!
{% endtrans %}

Используйте тэг plural для перевода множественных числительных:

{% trans apple_count %}
Hey {{ name }}, I have one apple.
{% plural %}
Hey {{ name }}, I have {{ count }} apples.
{% endtrans %}

Поддержка __call()

Twig теперь использует __call() для обращения к методам переменных.

Новый алгоритм обращения к методам объекта следующий:

  • получаем все методы объекта $object (используя reflectionObject);
  • проверяем является ли $item в списке методов;
  • проверяем есть ли get$item в списке методов;
  • проверяем определенна ли __call и передаем $item как имя метода.

Тэг set

Тэг set теперь поддерживает расширенный синтаксис. Это весьма удобно, если вам надо сохранить в переменной кусок HTML:

{% set foo %}
  <div id="pagination">
    ...
  </div>
{% endset %}

Фильтр cycle

Фильтр cycle может быть использован для перечисления между элементами массива:

{% for i in 0..10 %}
  {{ ['odd', 'even']|cycle(i) }}
{% endfor %}

Массив может содержать любое число элементов:

{% set fruits as ['apple', 'orange', 'citrus'] %}

{% for i in 0..10 %}
  {{ fruits|cycle(i) }}
{% endfor %}

Добавить комментарий