а я вот такого за 5 мин написал PHP: <? class tpl { public $tpldir; private $vars,$tplcache,$globalvars; function __construct($tpldir) { $this->tpldir=$tpldir; } function set($name,$value=0) { if (!is_array($name) && $value) { $this->vars[$name]=$value; }else if(is_array($name)) { foreach($name as $key=>$val) { $this->vars[$key]=$val; } }else { return false; } } function set_global($name,$value=0) { if (!is_array($name) && $value) { $this->globalvars[$name]=$value; }else if(is_array($name)) { foreach($name as $key=>$val) { $this->globalvars[$key]=$val; } }else { return false; } } function load($tplname) { if (!$this->tplcache[$tplname]) { $fp=@file_get_contents($this->tpldir.'/'.$tplname); if ($fp) { $fp=get_magic_quotes_gpc()?stripslashes($fp):$fp; $this->tplcache[$tplname]=$fp; } }else { $fp=$this->tplcache[$tplname]; } if (!$fp) return false; ob_start(); extract($this->vars); $_GLOBALS=$this->globalvars; eval("?".">".$fp."<?"); $res=ob_get_contents(); ob_clean(); $this->clear(); return $res; } function clear() { $this->vars=array(); } } ?> на первое время хватит =)
А что я вам говорил? Меня кто-то слушал? Native PHP гавно, неудобно, некрасиво! Тьфу блин. Радует что у народа наконец мозг встал на место. Наверно там народ наконец получил IT образование высшее.
Переписывать не обязательно, он будет поддерживать оба вида. Но всёравно радует, что они наконец поняли. Т.е. что бы обработать как PHP шаблон надо сделать так: $smarty->display('php:template_name.tpl'); Так что всё можно перевести по немногу, по шаблончику за раз
чё за фигня? в пхп делаю PHP: <? class a { function print_a() { print "AAA AAA AAA"; } function print_b() { print "BBBB BBBB BBBB"; } } $tpl=new tpl("tpl"); $tpl->set("error",new a()); print $tpl->load("error.tpl"); ?> в error.tpl PHP: Ошибка: <?$error->print_a();?> в мне а я PHP: Ошибка: <?if(is_object($error)) print "no err";?> а мне 0_o
Думается скорее всего смарти пошел на поводу у крикунов - "нате вам нативный пхп, только ацтаньте" =) Чем скомпилированный шаблон будет по скорости отличаться от нативного... не понимаю Но, зато, тем кому шашечки, тоже довольны остались. А те, кому ехать, так и будут дальше ехать, посмеиваясь
MiksIr На Smarty нельзя рекурсивно вывести шаблон. А иногда это нужно и много удобнее. Иногда надо применить какое-то специфичное форматирование одной функцией в одном шаблоне - делать для этого целый Smarty плагин очень глупо - а так можно просто её написать где-то в библиотечном файле и использовать в шаблоне как обычную функцию. В больших проектах от такого не убежишь как ни крути. Вопрос только в том, насколько разумно программист делит логику приложения и отображения. Каша получается и тех, кто этого делать не умеет. Нужно хотя-бы запомнить простейшее правило: шаблон не вытаскивает данные откуда либо, и шаблон не модифицирует и не обрабатывает данные (за очень редкими, точечными исключениями, обусловленными крайней специфичностью задачи). Шаблон должен получить данные из шаблонизатора через get() (у каждого по своему она называется) и отправить на вывод прямиком или перебором проставить в HTML данные из массива. Кстати, не путать с движками, где шаблон задаёт логику приложения. Такой подход тоже неплох, тут просто кому что нравиться .
Не понял, почему смпарти плагин - это глупо. Рассматриваем плагины как хелперы. Часто наоборот стараемся какой-нить хитрый ассигн вообще вынести в плагин, что бы скрыть реализацию от вью. В конце концов, что мешает ввести эту самуый библиотечный класс и дергать его из смарти статикой. > шаблон не вытаскивает данные откуда либо а как же активные шаблоны Насчет рекурсииивности шаблонов... мм.. сложно представить, зачем это нужно... но если уж нужно.. а что, шаблон сам в себя проинклудить нельзя?
Расскажите, как меряли? Нормально ли смарти компилит шаблоны (есть ли они в вообще) Очень странные цифры
как обычно в index.php измерил время в начале, потом в конце, потом вычел конечно нормально...а что значит ненормально? может это из-за того что всё доставлялось в шаблон в одном массиве, а там выводилось циклом section? но без этого теряется ряд важных приемуществ
Ну, может смарти не удается сохранить скомпиленный шаблон.. и каждый раз парсится все. Хотя, наверно ругалось бы... Было бы интересно синтетический тест сделать - набор данных, шаблон и посмотреть. Просто не ясно совершенно, откуда может быть выигрыш в 10 раз.