Оказывается, шаблонизатор для PHP-сайтов Smarty еще жив! 17 октября на сайте появилась новость о том, что доступен альфа-релиз 3-й версии со значительными изменениями, который не совместим с версией 2.
Так как самомуписать обзор изменений лень, приведу выжимку из обсуждения темы на habrahabr’e.
Интерфейс шаблонизатора особо не изменился. Это всё те же display(), fetch() и assign(), которые покрывают процентов 99 всех потребностей. Исчез метод assign_by_ref().
Внутренности же претерпели более существенные изменения:
- Отказ от поддержки PHP4 и полное использование объектно-ориентированных возможностей PHP5. То есть в шаблонах можно использовать разыменования объектов без костылей;
- Объектно-ориентированный подход затронул и плагины: теперь каждый плагин является классом, отнаследованным от Smarty_Internal_PluginBase
- Файл основного класса — Smarty.class.php — стал подозрительно маленьким: всего 11 кб, включая здоровенные спойлеры лицензии LGPL ;)
- Все требуемые элементы, исключённые из ядра, подгружаются лишь по мере необходимости (lazy loading)
- Маленькая приятность — встроенная реализация паттерна singleton.
- Поддержка нативных PHP-шаблонов.
Надо сказать, что по сравению с веткой 2.x, дистрибутив значительно потолстел: папка libs, экспортированная из SVN, заняла немногим менее 800 кб, в то время как в версии 2.6.20 её вес был был порядка 320 кб.
Подробности о релизе — в официальном README.
Желающие могут вытащить версию из SVN:
svn checkout smarty-php.googlecode.com/svn/branches/Smarty3Alpha/
Вот тут groups.google.com/group/smarty-developers/browse_thread/thread/c29ae569842882cd немного про синтаксис:
PHP: <?= $foo ?>
Smarty: {$foo} // same as Smarty 2
PHP: <?= $foo[‘bar’] ?>
Smarty: {$foo[‘bar’]} // no more {$foo.bar}
PHP: <?= $foo[$bar][$foo[‘bar’]] ?>
Smarty: {$foo[$bar][$foo[‘bar’]] ?> // identical to PHP
PHP: <?php foreach($foo as $bar) {… } ?>
Smarty: {foreach $foo as $bar}… {/foreach} // just a delimiter
adjustment
PHP: <?php for($x = 0; $x<$y; $x++) {… } ?>
Smarty: {for $x=0; $x<$y; $x++}… {/for} // get rid of {section}
PHP: <?php if($foo == $bar && $blah !== ‘ziggy’) {… } ?>
Smarty: {if $foo == $bar && $blah !== ‘ziggy’}… {/if}