Чем Smarty лучше обычных PHP включений ?

Igel

Guest
Чем Smarty лучше обычных PHP включений ?

Сижу, чешу репу.

Объясните популярно для невежд ;) , в чём приемущество смарти перед обычным PHP, при написании шаблонов.

К примеру, код на смарти:
PHP:
{* выводятся все значния массива $custid *}
{foreach from=$custid item=curr_id}
	<li> {$curr_id}</li>
{/foreach}

OUTPUT:

• 1000
• 1001
• 1002
а вот тоже самое, но на PHP:
PHP:
<ul><? foreach($custid as $curr_id)
{
echo "<li> $curr_id </li>";
}
?>
</ul>
OUTPUT:

• 1000
• 1001
• 1002
В принципе, лично я, никакой разницы не вижу, а вот Smarty должен больше нагрузить систему.

Объясните дураку, чем же он лучше! :D
 

Demiurg

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

>а вот Smarty должен больше нагрузить систему.
это почему ?
 

Alexandre

PHPПенсионер
<ul><? foreach($custid as $curr_id)
{
echo "<li> $curr_id </li>";
}
?>
</ul>
это когда модули простые и логики отображения нет :) то этот вариант вполне приемлем...

НО если в модуле существует: несколько экранных форм,
некоторые элементы показываются или скрываются в зависимости от некоторых условий, и многие элементы экранных форм формируются автоматически
(например три выпадающих списка, два ряда чекбоксов...)
да и еще пару попапов ) то данная смесь (php+HTML )становится просто ядерной...

кто разбирался в сложных скриптах без шаблонов, и знает - что это за геморой ;)

Каждый - может остаться при своем мнении, но
и опыт - сын ошибок трудных....
и
дураки - учатся только на своих ошибках
:D
так что тебе решать - путаться в своих включениях или использовать шаблоны ;)
 

Igel

Guest
Вот это уже объяснения. Теперь понимаю. ;)
 

Фанат

oncle terrible
Команда форума
Igel
вообще-то, кроме того, что в твоем примере нет ни одного тега хтмл, разницы никакой нет.

ответ на твой вопрос очень прост и очевиден - верстать хтмл гораздо проще, чем пхп программу.

Другое дело, что если разделять пхп и хтмл, то разницы действительно не будет вообще никакой.

-~{}~ 24.12.04 14:52:

НО если в модуле существует: несколько экранных форм,
некоторые элементы показываются или скрываются в зависимости от некоторых условий, и многие элементы экранных форм формируются автоматически
(например три выпадающих списка, два ряда чекбоксов...)
да и еще пару попапов ) то данная смесь (php+HTML )становится просто ядерной...
непонятно, каким таким волшебством сместь смарти+пхп станет менее ядерной.
 

tony2001

TeaM PHPClub
>непонятно, каким таким волшебством сместь смарти+пхп станет менее ядерной.
1)
PHP:
<input type="text" name="some" value="<?php if (isset($var)) echo htmlspecialchars($var); else echo "default_value"; ?>">
2)
PHP:
<input type="text" name="some" value="{$var|escape|default:"default_value"}">
 

Фанат

oncle terrible
Команда форума
Этот ваш смарти ужасно коряв. Какие-то лишние функции, конструкции.
в нормальном шаблоне не должно быть никаких функций.

Данный пример ужасен.
он перекладывает бизнес-логику на шаблон.

-~{}~ 24.12.04 15:18:

и даже при том, что самопальный синтаксис смарти на пару букв короче, чем синтсксис пхп, принципиально при этом не меняется ничего.

Речь шла не о длине записи.
А о принципе перемешки.
В данном случае вместо синтаксиса пхп в ядерную смесь добавили синтаксис смарти.
ПРИНЦИПИАЛЬНО не изменилось ничего.
просто подпрограмма <?php if (isset($var)) echo htmlspecialchars($var); else echo "default_value"; ?> стала короче и трудночитаемей.

-~{}~ 24.12.04 15:21:

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

Данный пример плох потому, что в шабоне решается ЧТО выводить. А шаблон должен решать только КАКвыводить. А что - решает скрипт.
мой любимый пример - строка навигации при постраничном выводе.
Тут, как ни крути - это оформление.
Вот давайте напишем вывод стрки навигации на самрти и на пхп.
и посмотрим
 

Demiurg

Guest
Фанат
htmlspecialchars - это бизнес-логика ?

Из принципиального я уже говорил про кеширование и конфиг файлах. В смарти есть много лишнего, но в общем, на мой взгляд smarty использовать удобно.
 

Фанат

oncle terrible
Команда форума
В данный момент я говорю только о "ядерной смеси"
И утверждаю.
Что с точки зрения ядерной смеси пхп может быть более ядерным, чем смарнти, ТОЛЬКО ОТ КРИВЫХ РУК.
принципиально же, очевидно, что это абсолютно одно и то же.

htmlspecialchars - это бизнес-логика. оно определяет содержимое переменной. а не оформление, ВНЕШНИЙ ВИД, за который отвечает шаблон.
htmlspecialchars, равно как и приведенную здесь Тони проверку на существование переменной можно и НУЖНО делать в скрипте.

нафига навешивать в шаблон ненужный код, а потом сравнивать?

кэширование? Хорошо, поговорим о кэширвоании.
кэширование в понимании смарти не имеет смысла при сравнении с raw php.
 

Макс

Старожил PHPClub
Фанат
Данный пример ужасен.
он перекладывает бизнес-логику на шаблон.
Преобразование текста с помощью htmlsprcialchars (если это делается для вывода этого текста) не является частью бизнес-логики.
Логика отображения != бизнес-логика


tony2001
input type="text" name="some" value="<?php if (isset($var)) echo htmlspecialchars($var); else echo "default_value"; ?>">
ты же прекарсно понимаешь, что это все можно сделать на ПХП и покороче (с помощью самописной функции)):
PHP:
<input type="text" name="some" value="<?=_p('var', 'default_val');?>">
 

neko

tеam neko
Автор оригинала: Макс
ты же прекарсно понимаешь, что это все можно сделать на ПХП и покороче (с помощью самописной функции)):
на что следует очевидный ответ
- но смарти УЖЕ написан!
- но я НЕЛЮБЛЮ смарти!!!
после чего диалог начинается с начала
 

Фанат

oncle terrible
Команда форума
Преобразование текста с помощью htmlsprcialchars (если это делается для вывода этого текста) не является частью бизнес-логики.
Логика отображения != бизнес-логика
Это отдельный вопрос, и я его готов обсудить, но не здесь.
Я считаю, и уменя есть аргументы, что хтмлспеципалчарс - функция исключительно техническая, хоть формально она и добавляет хтмл к тексту.

И что решать, применять её, или нет, должен не верстальщик, а программист.
 

Demiurg

Guest
>htmlspecialchars - это бизнес-логика. оно определяет
>содержимое переменной. а не оформление, ВНЕШНИЙ ВИД, за
>который отвечает шаблон.
нет htmlspecialchars приводит данные к нужному виду. А если я по тем же данным хочу сделать не html а plain text ? мне что надо будет обратное преоброзование делать ?

>кэширование в понимании смарти не имеет смысла при сравнении с raw php.
То есть все фичи, которые есть в смарти но нет в raw php смысла не имеют ? тогда действительно нечего сравнивать.

-~{}~ 24.12.04 15:46:

Может тогда стоит для начала определить, что мы считаем бизнес-логикой а что логикой представления ?
 

Макс

Старожил PHPClub
neko
я лишь намекал на то, что пример Тони некорректен.
Написать одну/несколько функций - пару минут уйдет

Фанат
С какой стати верстальщик должен определять ЗНАЧЕНИЕ ПЕРЕМЕННОЙ?!
там нет определения значения ПЕРЕМЕННОЙ. Там лишь определяется что будет выведено в поле формы
 

neko

tеam neko
макс я тоже намекал
на то что ничего корректного ты в этом треде не увидишь
поскольку тема сама по себе некорректна
 

Фанат

oncle terrible
Команда форума
То есть все фичи, которые есть в смарти
давайте не будем опускаться до передергиваний?
"кэширование" != "все фичи".

ПОВТОРЮСЬ.
В первую очередь я говорю о СИНТАКСИСЕ.
Поскольку вопрос был в первую очередь о СИНТАКСИСЕ.
и александре страшные сказки рассказывал, которые клиента напугали о СИНТАКСИСЕ.

Я утверждаю, что принципиально "ядерная смесь" с пхп НИЧЕМ неотличется от такой же со смарти.

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

-~{}~ 24.12.04 15:58:

Макс
А я говорю о том, что функции в шаблоне вообще не нужны.
УЖ ВО ВСЯКОМ СЛУЧАЕ - определяющие существование переменной.
там нет определения значения ПЕРЕМЕННОЙ. Там лишь определяется что будет выведено в поле формы
Макс, давай ты тоже не будешь заниматься буквоедством?
Я просто офигеваю, как вменяемые и адекватные люди начинают нести чушь в вопросе про шаблонизаторы.

ОПРЕДЕЛЯТЬ ВЫВОДИМЫЕ ДАННЫЕ
такая формулировка тебя устроит?

никакой _p('var', 'default_val') в шаблоне в принципе не должно быть! Вполне достаточно шаблону уметь выводить переменную.
А что в ней лежит - НЕ ДЕЛО ШАБЛОНА!
 

Demiurg

Guest
>Я утверждаю, что принципиально "ядерная смесь" с пхп НИЧЕМ неотличется от такой же со смарти.
если говорить о синтаксисе, то да. Так же как синтаксис Си принципиально не отличается от синтаксиса php.
 

Макс

Старожил PHPClub
Я утверждаю, что принципиально "ядерная смесь" с пхп НИЧЕМ неотличется от такой же со смарти.
Ядерная смесь это код типа :
PHP:
<? include("header.php");?>
<table>
 <? $r = mysql_query('SELECT .....');
     if (mysql_num_rows($r) < 1) {?>
  <tr><td> Извините, ничего не найдено</td></tr>
 <? } else { 
     while ($row = mysql_fetch_assoc($r)) { ?>
   <tr><td> <? echo htmlspecialchars($row['field']);?></td></tr>
 <? } ?>
<?}?>
</table>
<? include('footer.php');?>
В чем отличие смарти ?
В том, что все модификаторы, которые в нем есть направлены на изменение данных, необходимую для ВЫВОДА.
Все это - логика представления
 
Сверху