Тестирование шаблонизаторов для РНР
http://template-bench.iliakantor.ru/
Так же я думаю, что это будет полезно любителям вместо смарти использовать str_replace().
Так же я думаю, что это будет полезно любителям вместо смарти использовать str_replace().
Разница между str_replace и smarty не такая уж и большая. Всего то 31%.
З.Ы. :D все переходим на blitz! :)
Не факт. Нужно будет полюбому этот blitz поюзать.
Два порядка или 175 раз. (0.039989/0.000228 ~= 175)
Ты про blitz?
http://alexeyrybak.com/blitz/blitz_ru.html
http://alexeyrybak.com/blitz/blitz_ru.html
Спасибо! А то на сорцфорге нифига нету.
Скорость Blitz конечно впечатляет, но это сишный экстеншен, который на виртуальный сервер не поставишь.
Во вторых существует уже толпы верстальщиков которые разбираются в смарти, и переучиваться врядли захотят
Посмею поспорить. Блитц тоже удобен. Я всего за час научился им пользоваться. А смарти я еще в глаза не видел даже. :)
Шаблон:
[HTML]{{BEGIN Items}}
<table width="80%">
<tr><td width="90%">{{$name}}</td><td>{{$price}}</td></tr>
<tr><td colspan=2>{{$desc}}</td></tr>
</table>
<br>
{{END}}[/HTML]
Примитивный пример скрипта парсинга:
$res=mysql_query("SELECT `name`,`price`,`desc` FROM items LIMIT 2",$DbConn);
$pos=0;
while($row=mysql_fetch_assoc($res)){
$Result[$pos]=$row;
$pos++;
}
$Tpl=new Blitz($TplPath."items.tpl");
$Tpl->set(array("Items", $Result)); // Итерируем блок {{BEGIN Items}}, с указанными параметрами (итераций будет count($Result) раз).
$ParsedTemplate=$Tpl->parse(); // Парсим шаблон.
$Tpl->clean();
echo($ParsedTemplate);
...
Результат:
[HTML]<table width="80%">
<tr><td width="90%">Пила</td><td>$43</td></tr>
<tr><td colspan=2>Пригодится чтобы распилить доску или почесать затылок.</td></tr>
</table>
<br>
<table width="80%">
<tr><td width="90%">Молоток</td><td>$35</td></tr>
<tr><td colspan=2>Пригодится чтобы забить гвоздь или сделать кому-то эротический массаж. ;)</td></tr>
</table>
<br>[/HTML]
{{BEGIN Countries}}
<li>
{{$title}}
{{BEGIN Cities}}
<table width="80%">
<tr><td width="90%">{{$name}}</td></tr>
</table>
<br/>
{{END}}
</li>
{{END}}
</ul>
То есть банальный вывод списка стран и внутри каждой страны вывод списка городов. Как blitz поймет, что {{$name}} принадлежит объекту(массиву?) Cities а не Countries?
Немного непонятна логика автора модуля...
Откройте первую страницу этого форума. Вы видите список разделов: HTML, SEO и т.д. Этот список выводится циклом. У некоторых разделов есть подразделы (например у Microsoft .NET Framework) : Windows Forms, NET SDK (Fusion, Unmanaged API...), ASP.NET. Эти подразделы выводятся циклом внутри первого цикла. Вот вам и пример. А таких примеров можно накопать сколько угодно.
Да. Мне тоже.
Не понятно из какого контекста и что выдирать? Или ты просишь чтобы я не постил код?
Между прочим сейчас прочесывал инет в поисках тестов шаблонизаторов. Интересно то, что в одних тестах смарти выше str_replace(), в других наоборот. Если такая спорная ситуация, почти - нет разницы, то зачем строить велосипед? :) Надо глянуть на смарти на досуге. Чем горбатится и писать собственный шаблонизатор с помощью str_replace().
А разве шаблонизаторы не основаны на str_replace() ?
Или тема касается исключительно удобства использования?
по приведенному примеру - можно засетить что-то вроде
'Countries' => array(
array('title' =>'C1', 'Cities' => array(array('name' => 'N1'), ...)
...
)
или цикличеcки делать iterate для контекстов (блоков) /Counries и /Counries/Cities
А разве шаблонизаторы не основаны на str_replace() ?
Или тема касается исключительно удобства использования?
[QUOTE=shaelf;]Нет, не все. Например blitz вообще на сях написан. Есть и объектные шаблонизаторы (смотри Zend_View). Есть на xsl.[/QUOTE]А смарти вообще исполняемый код генерит