Готов пререлиз новой минорной версии CTPP: 2.5.0.
Первая версия ветки 2.5, готовая к использованию в production будет 2.5.1.
Появились итераторы; конструкция: TMPL_foreach array as iterator. Имя итератора может содержать символы
[a-zA-Z_][a-zA-Z0-9_]+.
<TMPL_foreach pages as page>
<TMPL_foreach page.users as user>
<TMPL_foreach user.friends as friend>
Page: <TMPL_var page.id> <TMPL_var page.url>
User: <TMPL_var user.id> <TMPL_var user.name>
Friend: <TMPL_var friend.id> <TMPL_var name> <TMPL_var friend.name>
</TMPL_foreach>
</TMPL_foreach>
</TMPL_foreach>Для чего все это надо?
Для того, чтобы во вложенных циклах можно было обращаться к переменным внешнего цикла.
Разумеется, сохранен и старый метод работы с циклами посредством операторов <TMPL_loop foo> и </TMPL_loop>
Если имя итератора не указано, переменная ищется сначала внутри последнего итератора, а затем - в глобальной области данных; по тому же образу и подобию, что и в TMPL_loop. То есть, в приведенном примере <TMPL_var name> <TMPL_var
friend.name> выдадут один и тот же результат.
Допустимо произвольное количество уровней вложенности циклов друг в друга; также можно комбинировать TMPL_loop и TMPL_foreach.
ВНИМАНИЕ! Байткод шаблонов, сгенерированных версиями 2.4.X будет исполняться и в 2.5.X, но обратное неверно: в 2.5.0 введена новая инструкция виртуальной машины (REPLACE), которой ранее не было. Если что - вас предупреждали ;).
В следующих патчах предполагается реализовать оператор <TMPL_break условие> что позволит прерывать текущий цикл по заданному условию.
Как обычно, вы не платите за то, что не используете. Поэтому если вам не нужна конструкция TMPL_foreach и в ваших шаблонах ее нет, ее нет и в байткоде, и следовательно, никакой лишней работы в шаблонизаторе не проиводится.
Количество строк кода проекта превысило 29000. Видимо, к версии 2.6 придется дробить проект на собственно виртуальную машину, компиляторы диалектов шаблонов и библиотеку стандартных функций.
TODO: сделать фильтр HTML тегов (привет, СУП!) и сделать по такому же образу и подобию фильтр BB-code. В отдаленной перспективе - реализовать систему мультиязычной трансляции с мультиформами (СУП, привет во второй раз!).
Начиная с сегодня основная ветка разработки - 2.5http://svn.havoc.ru/svn/ctpp2/branches/ctpp2-2.5/Изменения в ветке 2.4 в дальнейшем будут производиться в режиме исправления ошибок (что маловероятно) и обратного портирования функций стадартной библиотеки.