Smarty 3

Оказывается, шаблонизатор для -сайтов 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, экспортированная из , заняла немногим менее 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}

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