PHP « зачем нужен smarty если есть php quick tags?

да, да - я вот не вижу ни одной причинины по которой нужно юзать смарти.
Какая разница между
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }
{foreach from=$custid item=curr_id}
    id: {$curr_id}

{/foreach}

и
/** * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann * (http://qbnz.com/highlighter/ and http://geshi.org/) */ .php.geshi_code {font-family:monospace;} .php.geshi_code .imp {font-weight: bold; color: red;} .php.geshi_code .kw1 {color: #b1b100;} .php.geshi_code .kw2 {color: #000000; font-weight: bold;} .php.geshi_code .kw3 {color: #990000;} .php.geshi_code .co1 {color: #666666; font-style: italic;} .php.geshi_code .co2 {color: #666666; font-style: italic;} .php.geshi_code .co3 {color: #0000cc; font-style: italic;} .php.geshi_code .co4 {color: #009933; font-style: italic;} .php.geshi_code .coMULTI {color: #666666; font-style: italic;} .php.geshi_code .es0 {color: #000099; font-weight: bold;} .php.geshi_code .es1 {color: #000099; font-weight: bold;} .php.geshi_code .es2 {color: #660099; font-weight: bold;} .php.geshi_code .es3 {color: #660099; font-weight: bold;} .php.geshi_code .es4 {color: #006699; font-weight: bold;} .php.geshi_code .es5 {color: #006699; font-weight: bold; font-style: italic;} .php.geshi_code .es6 {color: #009933; font-weight: bold;} .php.geshi_code .es_h {color: #000099; font-weight: bold;} .php.geshi_code .br0 {color: #009900;} .php.geshi_code .sy0 {color: #339933;} .php.geshi_code .sy1 {color: #000000; font-weight: bold;} .php.geshi_code .st0 {color: #0000ff;} .php.geshi_code .st_h {color: #0000ff;} .php.geshi_code .nu0 {color: #cc66cc;} .php.geshi_code .nu8 {color: #208080;} .php.geshi_code .nu12 {color: #208080;} .php.geshi_code .nu19 {color:#800080;} .php.geshi_code .me1 {color: #004000;} .php.geshi_code .me2 {color: #004000;} .php.geshi_code .re0 {color: #000088;} .php.geshi_code span.xtra { display:block; }
<?foreach($arr as $curr_id):?>
id: <?=$curr_id?>

<?end foreach;?>

Помоему это одно и тоже, тогда зачем нагружать проект лишним? что бы тормозило и казалось что ух, программа, тормозит значит работает?

1 ответов


PHP по сути своей и есть шаблонизатор для вывода HTML (по крайней мере, так задумывал автор языка). Смарти — синтетическая надстройка над языком. Ни одного нормального довода в пользу использования смарти-тегов вместо тегов PHP я еще не слышал. Тем же самым верстальщикам вообще без разницы, просто нужно сказать, что можно трогать, а что нельзя. Для верстальщика код, независимо от его представления, как был непонятной кашей так и остался.

Для читающих по-английски:
nosmarty.net/


Смотря где использовать. Например если вы пишете код снуля и MVC архитекрура вам не дуступна(или вы будете ее организовывать вручную), то лучше использовать смарти.

Если вы используете например zend-framework, то я бы отказался от смарти, хотя и есть некоторые способы его туда интегрировать, но по своему опыту знаю, что этих php quick tags вполне достаточно если логика уже отделена от представления.

В общем я думаю это больше зависит от человека и что ему ближе.


Верстальщик, владеющий smarty стоит дешевле, чем полноценный php-программист. Да и не каждый программер захочет заниматься версткой.
Так же, Smarty обеспечивает кеширование данных, что очень важно в нагруженных проектах. А в случае php quick tegs эта забота лежит на разработчике приложения.


С Википедии:
Smarty — компилирующий обработчик шаблонов для PHP, один из инструментов, позволяющих отделить прикладную логику и данные от представления в духе концепции Model-view-controller.

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


Постараюсь ответить по сути.

Первое.
Смарти - компилирующий обработчик шаблона. Шаблон смарти компилируется в точно такой же код php, который сохраняется в кэш и каждый раз выполняется именно он, тоесть готовй php код - никаких "тормозит значит работает".
Здесь уже как вам удобнее - хотите используйте просто файл со вставками quick-tags, хотите делайте через смарти.

Второе.
В смарти есть пользовательские функции, блочные функции (сорри, мог слегка перепутать терминологию), и модификаторы переменных. В сложном проекте не обойтись без модификаторов default, date_format, escape и тд. Эти вещи реально удобные, хотя ничего страшного если для кого-то они "на любителя".

Вот вам пример насчет удобства модификатора переменных против quick-tags:


<title><?=(!empty($title))? $title : "My site name" ?></title>
 


<title>{$title|default:"My site name"}</title>
 

на перле есть очень удобный шаблонизатор HTML::Template
=) так я просто юзаю для пхп , либу с поддержкой таких же шаблонов PHP-HTML::Template

в данном случае в темплейтах нельзя писать код ) все надо передавтаь в параметрах ) что очень воспитывает от отвзяывает код от хтмла )

а то что это называется MVC и это модно ) я узнал уже потом )


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


как-то я разводил небольшую беседу на подобную тему. Вот ссылка если интересно:
https://groups.google.com/group/ru-zend-framework/browse_thread/thread/61fe5aeaa728ac96/6b111353cfd96ed7?hl=ru&lnk=gst&q=smarty#6b111353cfd96ed7


Я пользую BLOX CMS, в котором есть возможность применять как шаблоны, написанные на PHP, так и на Smarty. Раньше в справочнике этой системы примеры шаблонов приводились на языке Smarty - теперь на PHP. Этим, по моему, всё сказано. Здесь хорошая статья на эту тему: Выбор шаблонизатора: Smarty или PHP ?


Пусть меня загонят в минуса, но я всё же выскажу своё мнение:
1. Плюньте в лицо тому, кто говорит, что PHP - сам по себе отличный шаблонизатор!
2. Плюньте в лицо тому, кто рекомендует вам Smarty!

Скажите мне, идиоту, зачем вообще нужны вещи типа foreach в шаблоне? Разве не для того были придуманы шаблонизаторы, чтобы отделять логику от представления? Разве использование foreach и if - это не логика?
Знаете, что я предлаогаю? Я предлогаю вместо:


{{variable_name}}
 
использовать

<!-- variable_name -->
 
Я предлогаю вместо всяких там

{{include_file:header.tpl}}
 
использовать конструкцию

<!-- header.tpl -->
 

А еще я предлогаю не использовать конструкции foreach и if в шаблонах!
Дальше мне писать лень, если кому интересно, то пишите на the.nulpatrol@gmail.com, может мы реализуем подобный мини-шаблонизатор.