Я рад представить вам Twig 0.9.6. Это технический релиз, где исправлены некоторые ошибки и добавлено несколько новых особенностей. До того как выйдет Twig 1.0 осталось два основных тикета.
Кроме исправления ошибок и новых особенностей, есть два примечательных изменения внутри Twig (однако мало важные для пользователей библиотеки): для юнит-тестов используется PHPUnit и код оформлен в соответствии в стандартами PEAR .
Документация обновлена в соответствии со сделанными изменениями новой версии.
Дальше будет рассказано об основных изменениях, но если вы хотите знать все подробности – загляните в лог правок.
Обратная совместимость соблюдена, обновление от 0.9.5 должно быть безопасным:
Мы исправили несколько ошибок, основные из них:
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 %}