pachanga
Новичок
зачем нужен smarty
Я создал умышленно эту тему не для того, чтобы устроить некчемный flame, а чтобы услышать советы и аргументы профессионалов.
Небольшая предыстория, чтобы меня не пинали без предупреждения в форум к новичкам( извини меня RomikChef, но я хочу поделиться с теми, кто написал на php, хотя бы 80000 строк кода):
Мы очень уже относительно давно пишем свою CMS(отдельная песня) и, естессно, столкнулись с проблемой оформления и вывода информации.
Первоначально наши оптимистичные взоры были брошены в сторону smarty -- действительно ведь дизайнер получает как бы полную свободу...но, давайте задумаемся, ведь цель шаблонов - освободить дизайнера от головной боли знания конструкций некого языка программирования.
В идеале дизанер просто тычет в те места, куда вставляется некий динамический контент. Но это только в идеале...
Мы никак не смогли решить проблему с выносом логики из шаблонов вообще, поэтому выбор лег на smarty.
Изначально нас что-то насторожило, некое предчувствие, вроде бы и smarty, все замечательно...но озарение пришло быстро и болезненно: smarty -- пустая эмуляция PHP, черт возьми! На такие размышления натолкнул, кстати, Harry Fueckes...
Дальше будет интересней...
Пусть в меня кинет камень тот, кто скажет, что smarty облегчает жизнь дизайнеру....вы видели, как оформляется цикл в smarty??? Это что -- нормально?!
Про скорость работы этого монстра smarty я не буду распространяться, те кто применял его без PHP Accelerator на продукционном сайте, сами знают, что я имею ввиду.
Идея реализации своего 'smarty' родилась мгновенно, вот она:
Что же из себя представляет шаблон?
Вот, скажем шаблон для ленты новостей:
Обратите внимание на переменную $t, именно в ней хранятся все переменные шаблона.
На время парсинга шаблона уровень ошибок php снижается и не будет ничего кроме фатальных ошибок в шаблоне, т.е <?=$foo?> сработает просто замечательно без warning, если даже эта переменная не определена.
Для чего используется такая древняя нотация php? А для того, чтобы html был четко виден дизайнеру.
Естессно, такой шаблон наделяет нас очень большой мерой ответсвенности, но разве в smarty что-то выглядит иначе?
Ну а во сколько раз этот метод быстрее 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;
?>
На время парсинга шаблона уровень ошибок php снижается и не будет ничего кроме фатальных ошибок в шаблоне, т.е <?=$foo?> сработает просто замечательно без warning, если даже эта переменная не определена.
Для чего используется такая древняя нотация php? А для того, чтобы html был четко виден дизайнеру.
Естессно, такой шаблон наделяет нас очень большой мерой ответсвенности, но разве в smarty что-то выглядит иначе?
Ну а во сколько раз этот метод быстрее smarty - говорить не приходится.
Что ж я весь во внимании: жду ваших аргументированных ответов...