зачем нужен smarty

Статус
В этой теме нельзя размещать новые ответы.

pachanga

Новичок
зачем нужен smarty

Я создал умышленно эту тему не для того, чтобы устроить некчемный flame, а чтобы услышать советы и аргументы профессионалов.

Небольшая предыстория, чтобы меня не пинали без предупреждения в форум к новичкам( извини меня RomikChef, но я хочу поделиться с теми, кто написал на php, хотя бы 80000 строк кода):

Мы очень уже относительно давно пишем свою CMS(отдельная песня) и, естессно, столкнулись с проблемой оформления и вывода информации.

Первоначально наши оптимистичные взоры были брошены в сторону smarty -- действительно ведь дизайнер получает как бы полную свободу...но, давайте задумаемся, ведь цель шаблонов - освободить дизайнера от головной боли знания конструкций некого языка программирования.

В идеале дизанер просто тычет в те места, куда вставляется некий динамический контент. Но это только в идеале...

Мы никак не смогли решить проблему с выносом логики из шаблонов вообще, поэтому выбор лег на smarty.

Изначально нас что-то насторожило, некое предчувствие, вроде бы и smarty, все замечательно...но озарение пришло быстро и болезненно: smarty -- пустая эмуляция PHP, черт возьми! На такие размышления натолкнул, кстати, Harry Fueckes...

Дальше будет интересней...

Пусть в меня кинет камень тот, кто скажет, что smarty облегчает жизнь дизайнеру....вы видели, как оформляется цикл в smarty??? Это что -- нормально?!

Про скорость работы этого монстра smarty я не буду распространяться, те кто применял его без PHP Accelerator на продукционном сайте, сами знают, что я имею ввиду.

Идея реализации своего 'smarty' родилась мгновенно, вот она:

PHP:
<?php 
class php_template { 
    var $template_dir = ''; 
    var $file_name = ''; 

    var $vars = array(); 

    function php_template() {} 
    function assign($name, $value) { 
        $this->vars[$name] = $value; 
    } 
    function set_file_name($name) { 
        $this->file_name = $name; 
    } 
    function set_template_dir($name) { 
        $this->template_dir = $name; 
    } 

    function parse() { 
        $t = array(); 
        $old_error_reporting = error_reporting(E_ALL & ~(E_WARNING | E_NOTICE)); 
        ob_start(); 
        $str = ''; 
        foreach($this->vars as $var_name => $var_value) { 
            $str = "$var_name"; 
            parse_str($str); 
            $t[$var_name] = $var_value; 
        } 
        $file_name = $this->template_dir.'/'.$this->file_name; 

        include($this->template_dir.'/'.$this->file_name); 

        $str = ob_get_contents(); 
        ob_end_clean(); 
        error_reporting($old_error_reporting); 
        return $str; 
    } 
} 
?>
Что же из себя представляет шаблон?
Вот, скажем шаблон для ленты новостей:
PHP:
<? 
    $i = 0; 
    foreach($t['news_line_data'] as $news): 
?> 

<TABLE width="100%" border="1" cellspacing="0" cellpadding="8" bordercolor="#CCCCCC"> 
    <TR> 
        <? 
        if($i++ % 2): 
        ?> 
        <TD bgcolor="#FF9966"> 
        <?else:?> 
        <TD bgcolor="#FFCC99"> 
        <?endif?> 
         
            <P class="new"> 
            <SPAN class="newsdate"> 
            <?=date('Y/m/d', strtotime($news['new_date']))?> 
            </SPAN> 
            <BR> 
            <BR><B><?=$news['title']?></B> 
            <BR> 
            <BR><?=$news['content']?> 
            <BR> 
            <BR> 
            </P> 
        </TD> 
    </TR> 
</TABLE><BR> 

<? 
    endforeach; 
?>
Обратите внимание на переменную $t, именно в ней хранятся все переменные шаблона.
На время парсинга шаблона уровень ошибок php снижается и не будет ничего кроме фатальных ошибок в шаблоне, т.е <?=$foo?> сработает просто замечательно без warning, если даже эта переменная не определена.

Для чего используется такая древняя нотация php? А для того, чтобы html был четко виден дизайнеру.
Естессно, такой шаблон наделяет нас очень большой мерой ответсвенности, но разве в smarty что-то выглядит иначе?

Ну а во сколько раз этот метод быстрее smarty - говорить не приходится.

Что ж я весь во внимании: жду ваших аргументированных ответов...
 

Макс

Старожил PHPClub
smarty - отнюдь не самый лучший (ИМХО) шаблонизатор, поэтому сравнивать твое творение с ним немного однобоко.

Что касается твоего шаблона то если дизайнеру показать строки:
<?
____$i = 0;
____foreach($t['news_line_data'] as $news):
?>
<TABLE width="100%" border="1" cellspacing="0" cellpadding="8"
или
_<SPAN class="newsdate">
____________<?=date('Y/m/d', strtotime($news['new_date']))?>
____________</SPAN>
у него крыша поедет

ЗЫ
все это ИМХО
 

pachanga

Новичок
Согласен, что крыша у дизигнера поедет, но здесь нет легкого пути: добавление логики в шаблон того стоит, тем более в smarty это бы выглядело ничуть не лучше...
Вывод: хороший web дизигнер должен чуть-чуть быть программистом!
 

voodoo

Новичок
а типа там w3c.org с его спецификациями xml/xslt не рулит?
 

.des.

Поставил пиво кому надо ;-)
2voodoo это флэйм :) ибо это не что иное как ЕЩЕ ОДИН движок шаблонов правда стандартизированный.

2pacha насчет выноса логики из шаблонов - Crazy, если не ошибаюсь твой союзник :) вот взгляни на это обсуждение.
http://phpclub.net/talk/showthread.php?s=&threadid=17999

Что касается Smarty мне предстоит потратить уйму времени чтобы придумать куда деть всю его функциональность. Это монстр мной не понятый.
 

voodoo

Новичок
2.des.: как тебе аргумент по поводу "еще один": покажи как этот smarty будет работать с jsp.

да и вообще, сами по себе xml или xslt это вовсе даже и не движки :)
 

voodoo

Новичок
и, кстати, стандарт -- это, по-моему, достаточно весомый аргумент.
(тут же просили аргументированных ответов?)
 

Long

Новичок
да вы что? никакой логики в шаблоне не должно быть. конечно - это во многом удобнее, и часто просто жизненно необходимо, но шаблон должен быть шаблоном. поэтому, оставлять пути отхода естественно надо, но это должно быть исключением.
хороший web дизигнер должен чуть-чуть быть программистом!
в мелкой конторке под дизайнером подразумевают обычно универсала - и рисовать он, и верстать он, и т.д. но давно известно, что универсальность это снижение качества каждого из процессов в отдельности. поэтому, должно быть как мин. три человека - дизайнер, верстальщик (вот этого еще можно научить каким-то основам программирования) и программист.
voodoo, у xml есть один недостаток, но он перекрывает все достоинства - для большинства верстальщиков он слишком сложен :(
 

tony2001

TeaM PHPClub
>Я создал умышленно эту тему не для того, чтобы устроить
>некчемный flame, а чтобы услышать советы и аргументы
>профессионалов.
это именно нИкчемный флейм, затеянный человеком, который не дочитал мануал.

>извини меня RomikChef, но я хочу поделиться с теми, кто написал на
>php, хотя бы 80000 строк кода):
эк ты его.

>но, давайте задумаемся, ведь цель шаблонов - освободить
>дизайнера от головной боли знания конструкций некого языка
>программирования.
в последнее время я начал понимать всю ошибочность этого утверждения.
дизайнер - делает дизайн.
верстальщик делает ХТМЛ и шаблоны.
программер делает код.

>В идеале дизанер просто тычет в те места, куда вставляется некий
>динамический контент. Но это только в идеале...
в идеале дизайнер тычет только в Фотошоп, т.к. у него талант рисовать, а не талант резать ХТМЛ.

>smarty -- пустая эмуляция PHP, черт возьми! На такие размышления
>натолкнул, кстати, Harry Fueckes...
я, к сожалению, не согласен с Harry Fueckes, при всем моем скептическом отношении к Смарти.

>Пусть в меня кинет камень тот, кто скажет, что smarty облегчает
>жизнь дизайнеру....вы видели, как оформляется цикл в smarty???
причем тут дизайнер?
с шаблонами работают верстальщик и программер.

>Это что -- нормально?!
PHP:
        {foreach from=$regions item=region key=key}
            <option value="{$key}">{$region}</option>
        {/foreach}
да, нормально.
скажи что тебя не устраивает.

>Про скорость работы этого монстра smarty я не буду
>распространяться, те кто применял его без PHP Accelerator на
>продукционном сайте, сами знают, что я имею ввиду.
сайт полностью на Смарти, на дорогом, но очень загруженном хостинге:
средняя страничка грузится за 0.1 сек.

Я думаю, что кроме критических статей, для того, чтобы сформировать объективный взгляд на какую-либо вещь, надо иметь опыт работы с ней.
Пока я не слышал ни одного серъезного аргумента "против" смарти, кроме:
1) >smarty -- пустая эмуляция PHP, черт возьми!
2) >Пусть в меня кинет камень тот, кто скажет, что smarty облегчает жизнь дизайнеру
3) >Про скорость работы этого монстра smarty я не буду распространяться

P.S. я не в восторге от Смарти.
у него масса недостатков.
но у него есть масса преимуществ, о которых не все знают.
 

camka

не самка
Хочу внести свою скромную лепту по поводу.
Действительно смарти грешен тем что всетаки несет в себе некую логику, которая по идее должна распологаться в програмном коде. А вот фаст темплейт в этом смысле хорош. Вот бы такой движок со скоростью смарти и с безгрешностью фасттемплейта. Было бы идеально.
Вывод:
Идеальный движек каждый пишет себе сам.
 

RomikChef

Guest
сейчас сейчас....
79991 уже есть...
Скоро я смогу писать в эту тему!!!!
 

confguru

ExAdmin
Команда форума
Написанный pasha пример - это вообще
не работа с шаблонами..
Нарушается главный принцип шаблона -
никакого кода в шаблоне....

Есть старая статья по фасттемплейтам
но она актуальна для понимания проблемы...
http://phpclub.net/index.phtml?m=30004

Если у тебя очень нагруженный сайт,
то используй su1d шаблонный движок,
на котором сейчас делается новый phpclub
только скомпили его внутри php.
 

pachanga

Новичок
Автор оригинала: tony2001
1) >smarty -- пустая эмуляция PHP, черт возьми!
2) >Пусть в меня кинет камень тот, кто скажет, что smarty облегчает жизнь дизайнеру
3) >Про скорость работы этого монстра smarty я не буду распространяться

P.S. я не в восторге от Смарти.
у него масса недостатков.
но у него есть масса преимуществ, о которых не все знают.
По-моему, это и есть самые весомые аргументы :)
А вот о массе преимуществ, плиз, подробнее...
 

pachanga

Новичок
Или преимущество - писать свои фильтры, препроцессоры, построцессоры для smarty? Мануал я читал и даже распечатал -- вот он лежит на 115 страничек около меня...
 

Андрей М.

Guest
Long:
>voodoo, у xml есть один недостаток, но он перекрывает все достоинства - для большинства верстальщиков он слишком сложен
Верстальщику/дизайнеру не надо мучиться с xslt преобразованиями, пусть даст мне сверстанную HTML страничку (можно даже не well-formed - есть же tidy) - я сам сделаю xslt-шаблон. Надо только договориться о структуре данных.

.des.
>это флэйм ибо это не что иное как ЕЩЕ ОДИН движок шаблонов правда стандартизированный.
Это примитивное представление о xml.

---
>хотя бы 80000 строк кода):
а я раньше думал, краткость - сестра таланта ;-)
Извиняюсь за оффтопик.
 

RomikChef

Guest
В прошлом обсуждении я посоветовал этому юному дарованию подчистить код, отделить его от хтмла.
если бы он послушал, то получилось бы что-то вроде
PHP:
<? 
    foreach($t['news_line_data'] as $news):
      extract($news);
      $date=date('Y/m/d', strtotime($news['new_date']));
      $bgcolor=($i++ % 2)?"#FF9966":"#FFCC99";
?> 

<TABLE width="100%" border="1" cellspacing="0" cellpadding="8" bordercolor="#CCCCCC"> 
    <TR> 
        <TD bgcolor="<?=$bgcolor?>"> 
            <P class="new"> 
            <SPAN class="newsdate"> 
            <?=$date?> 
            </SPAN> 
            <BR> 
            <BR><B><?=$title?></B> 
            <BR> 
            <BR><?=$content?> 
            <BR> 
            <BR> 
            </P> 
        </TD> 
    </TR> 
</TABLE><BR> 
<? 
    endforeach; 
?>
А <?=$title?> не сильно сложнее для понимания верстальщика, чем {title}

Даже такой простой пример показывает, что товарищь высосал код из пальца, совершенно о нем не думал, и выкатил на обсуждение.
В первый раз просто выдал невразумительный код,
во второй раз исполняет арию "Уговорите меня!".
вопрос. кому-нибудь надо уговаривать его пользоваться смартей или шаблонами вообще?
 

.des.

Поставил пиво кому надо ;-)
des.
>это флэйм ибо это не что иное как ЕЩЕ ОДИН движок шаблонов правда стандартизированный.
Это примитивное представление о xml.
Андрей М. разубеди меня?

я сам сделаю xslt-шаблон.
чем это отличается от того что я напишу код и при помощи шаблонного движка распарсю нужный контент.

Надо только договориться о структуре данных.
ну и этого нам не избежать...
пойми же.. если в моем посте ты увидел хоть намек на то что ХМЛ это сакс.. или тому подобные суждения ты глубоко ошибся. Просто как бы ни заходила бы речь о шаблонных движках обязательно кто то скажет ХМЛ.
XML уже одним достоинством перекрывает все остальное - тем что это СТАНДАРТ.
Но топик не для этого и не об этом улавливаешь?
 

tony2001

TeaM PHPClub
>По-моему, это и есть самые весомые аргументы
это утверждения.
без каких-либо оснований.
а аргументы приводятся вместе с ними.

>А вот о массе преимуществ, плиз, подробнее...
Variable Modifiers
Config Files
Caching
Extending Smarty With Plugins

подробнее - в мане.
 

pachanga

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

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

А вообще этот самый код шаблона появился не с пустого места,
это был на самом деле реальный smarty шаблон, писаный не мной, и его буквально за 3 минуты "переделал" в свой шаблон, и к тому же дизайнер был просто счастлив.
 
Статус
В этой теме нельзя размещать новые ответы.
Сверху