Белый Savant для Smarty

confguru

ExAdmin
Команда форума
Белый Savant для Smarty

Медленно но верно шаблонизатор Savant2 начинает завоевывать популярность среди веб-разработчиков. В среду состоялся новый релиз системы, на этот раз под номером 2.4.0. В новой версии внесены некоторые изменения, призванные укрепить безопасность системы.
Более подробно о способах работы с Savant2 можно узнать к примеру на sitepoint.com, где Девид Миттон (David Mytton) представляет ознакомительный курс по шаблонизатору.
Savant2 отличается от многих шаблонных движков тем, что не компилирует шаблоны и таким образом не предполагает изучение нового языка разметки, как это делает к примеру Smarty.

Многие вобще видят в Savant2 серьезную конкуренцию Smarty, к примеру, среди комментариев к проекту есть и такие: "PHPSavant is great! It kicks smartys ass!" ("PHPSavant великолепен! Он надерет задницу Smarty") и "This is much much better than Smarty" ("Это намного намного лучше чем Smarty"). Кроме этого, определение на официальном сайте гласит: "Savant - это простая, элегантная и мощная альтернатива Smarty". Интересно что это - рекламный трюк или новая реальность?

По материалам
http://phpinside.ru/?q=node/67
 

Demiurg

Guest
>к примеру, среди комментариев к проекту есть и такие: "PHPSavant is great! It kicks smartys ass!"
беусловно сильный аргумент, только в чью пользу?
 

si

Administrator
по-моему таким постам самое место в помойке
 

kvf77

Red Devil
admin
помоему бред какой-то.
каким образом компилируемость влияет на присутствие "нового языка разметки"? помоему совсем не в тему замечание
 

nw

Новичок
помоему совсем не в тему замечание
Да, это не совсем точный перевод. Там должна быть запятая, т.е. не компилирует шаблоны и не использует нового языка разметки.

-~{}~ 01.08.05 17:19:

В источнике поправлено. Спасибо.
 

Gorath

Новичок
Резюме комментариев с sitepoint.com и собственных опытов:
Недостатки, по сравнению со Smarty:
- переменные и плагины из шаблона вызываются сложнее (длиннее код) :
Код:
<?php $this->title; ?>
вместо
{$title}
и
<?php $this->plugin('options', $this->titles, $this->sel_title); ?>
вместо
{html_options values=$titles selected=$sel_title}
- в три раза меньшее количество плагинов/фильтров
Достоинства:
- проще делать сложные шаблоны. Например, в Smarty не работает такое: {if $testArray[$someVar] == $otherVar} и т.п.
- в два-три раза выше производительность. Пробовал 2 шаблона - простой с 2мя переменными и сложный: древовидное меню в массиве, генерация селект-листа. На простом - в 1.5 раза выше, на сложном - в 4-4.5 раза.

-~{}~ 03.08.05 22:03:

Теперь несложный анализ:
Первый пункт: длиннее и корявее код.
Не так страшно, тем более, что, например, сравнив вывод за'escape'нной переменной, получим:
Код:
<? $this->_('title'); ?>
вместо
{$title|escape:"html"}
..не такая уж и большая разница.
на счет подключения плагинов - и так разница не большая, а в php5 можно делать еще читабельнее:
<? $this->options($this->titles, $this->sel_title); ?>

Второй пункт. Недостаток плагинов.
Тем более не страшно, так как все основные плагины есть, а если нужно что-то особенное, написать плагин или фильтр даже проще, чем в Smarty.

-~{}~ 03.08.05 22:05:

На последок еще размышления:
Разделяя код на логику и представление мы исходим из следующих соображений:
1. так удобно писать код, все составляющие логично разделены.
2. в будущем делать редизайн сайта намного проще
3. обеспечивается разделение труда. Грубо говоря, мы можем дать доступ дизайнеру к самому сайту не боясь, что он нарушит бизнес-логику, а не реализовывать верстку самому.
Возникает вопрос: где должна находится логика представления и насколько сложной она может быть?
По пунктам 1 и 2 вопростов не возникает - мы сами себе программеры и делаем такие шаблоны, как нам удобнее.
С третьим - сложнее.
Начнем с того, что собственно бизнес-логики в шаблоне быть не должно. Значит, ничего совсем сложного в шаблоне нет.
Аргумент второй: язык Smarty не намного проще php в контексте логики представления.
Аргумент третий: дизайнер - не дурак :) он все понимает, и наши обьяснения, и часто даже php.
 

Demiurg

Guest
>в Smarty не работает такое: {if $testArray[$someVar] == $otherVar} и т.п.
и даже так
{if $testArray.$someVar == $otherVar} ?

>в два-три раза выше производительность.
технику тестирования в студию.
 

Rammstein

PHPClub::News
Один фиг скомпилированный смарти шаблон работает так же быстро, как и обычный Savant (проверено тестами).
А когда происходит компилирование? После каждого изменения шаблона! И что, разве это много?

А дизайнер (да простят меня дизайнеры) как раз дурак относительно программирования PHP. Ему проще запомнить, что Smarty -теги отличаются от HTML только первым и последним символом, а в остальном похожи (так же как и в HTML идёт пара "ключ=значение", в PHP же параметы через запятую и в скобках после имени функции).

Если использовать Savant в качестве компилятора, то он на порядок тормознее того же Smarty

-~{}~ 04.08.05 12:45:

Тест 1 (Вывод нескольких переменных + передаём небольшой массив в шаблонизатор; Savant без шаблонизатора):
Savant: 41.78 мс - 46.77 мс Smarty: 50.34 мс
Тест 2 (Только для Savant; В Savant используется стандартный компилятор)Ж
Savant: 85.61 мс
Тест 3 (Проходимся по массиву в 1000 значений с их выводом; У Savant включен компилятор)
Savant: 92.41 мс, Smarty: 69.6 мсек - ~ 80 мс

прим.: Не использовались какие-либо оптимизаторы
 

kvf77

Red Devil
Gorath
{if $testArray[`$someVar`] == $otherVar} - и все заработает, если лень почитать доку - не надо говорить, что не работает.

Savant не вставил если честно - в моем представлении - это не шаблонизатор вовсе - а попытка "обосновать" применение PHP кода в шаблоне. Это не то совсем - короче - внимания не стоит, по моему мнению, разумеется.
 

crocodile2u

http://vbolshov.org.ru
Имхо, единственный большой плюс Savant - отсутвие необходимости учить новый синтаксис. Тем не менее, чтобы делать Smarty-шаблоны, в подавляющем большистве случаев достаточно запомнить несколько основных правил + несколько основных плагинов. Остальное, когда оно понадобится, можно посмотреть в доке...

Еще, конечно, фишка Savant - возможность использования всего богатства php. Но это преимущество может оказаться чем-то наподобие гранаты в руках у мартышки, если код шаблона будет править некто... скажем так, не слишком хорошо знающий язык... Смарти ограничивает дизайнера шаблонов в этом смысле. И еще вопрос, плохо это или хорошо.
 

kvf77

Red Devil
crocodile2u

мне кажется, что + этот важен тока тебе, как программеру. дизайнеру полюбому проще освоить смарти будет
 

kvf77

Red Devil
crocodile2u

да вот я как раз не вижу особого плюса. потому что мы явно опять мешаем выводи с кодом - чего шаблонизатор по идее призван избежать - нафиг при таком подходе шаблонизатор?
крубо говоря, можно писать обычный PHP скрипт код вперемешку с хтмл и просто его инклудить

смарти же вносит обпределенную долю абстракции
 

crocodile2u

http://vbolshov.org.ru
Да я лично вообще Savant шаблонизатором не считаю, как и не считаю "его" синтаксис удобным.
 

DenVeroid

Новичок
Еще, конечно, фишка Savant - возможность использования всего богатства php.
хм, а разве в смарти нельзя этого делать?

как нистранно, но смарти тоже может это делать также просто

в шаблоне
{php}
php-код
{/php}
 

Gorath

Новичок
А ты пробовал писать шаблоны, смешивая пхп и смарти?
получаются такие монстры:
PHP:
if ($this->_tpl_vars['vars']['cat'][$this->_tpl_vars['options']['categories'][$this->_sections['i']['index']]['cat_id']] == 'on')
{
echo "checked";
}
 

alexhemp

Новичок
Gorath
Ну и зачем это, простите, делать вставкой php кода?

с индексами можно через assign в крайнем случае решить, в большинстве сложных случаев их можно упростить.

php код в шаблон можно вставлять в случае pull шаблонов - т.е. когда шаблон тягает базу, а не скрипт - шаблон

Вижу одно приемущество Savant - возвращение к истокам. Новичкам в php это очень полезно. :)
 

Rammstein

PHPClub::News
Может будут положительные отзывы? Мне бы ещё преимуществ набрать) Сам считаю, что это бредовая идея. По мне так лучше в таком случае использовать include...
 
Сверху