Если вы собираетесь поступать таким образом, вы хотите разделить логику и дизайн, правда.
Но для этого не нужно использовать Smarty.
Приоритет - это образ мышления. Я видел, как люди делают шокирующие вещи в Smarty, и в конечном итоге это превращается в людей, разрабатывающих сайты в Smarty, и тогда какая-то яркая искра решает, что им нужно написать шаблонизатор в Smarty (никогда не недооценивайте потенциал глупая идея).
Если вы разделите свой код на две части и заставите себя придерживаться стандарта, вы получите гораздо лучшую производительность.
PageLogic.php
<?php
$pageData = (object)(array()); // Handy trick I learnt.
/* Logic Goes here */
$pageData->foo = SomeValue;
ob_start();
require("layout.php");
ob_end_flush();
Layout.php
<html>
<!-- etc -->
<?php for ( $i = 1; $i < 10; $i++ ){ ?>
<?php echo $pageData->foo[$i]; ?>
<?php } ?>
<!-- etc -->
</html>
PHP был написан как механизм создания шаблонов, поэтому вам, по крайней мере, следует попробовать использовать его для поставленной задачи, прежде чем оценивать, нужно ли вам углубляться в Smarty.
Более того, если вы решите использовать механизм шаблонов, попробуйте получить тот, который экранирует HTML по умолчанию, и вы «откажетесь» вместо «включите». Вы избавите себя от многих проблем с XSS. Smarty в этом отношении слаб, и из-за этого в нем написано много наивных по содержанию шаблонов.
{if $cond}
{$dangerous_value}
{else}
{$equally_dangerous_value}
{/if}
Это вообще то, как идут шаблоны Smarty. Проблема в том, что $ dangerous_value может быть произвольным HTML, и это приводит к еще большему плохому кодированию с неотслеживаемым спагетти-кодом повсюду.
Любой язык шаблонов, который вы считаете , должен учитывать эту проблему. например.:
{$code_gets_escaped}
{{$code_gets_escaped_as_a_uri}}
{{{$dangerous_bare_code}}}
Таким образом, ваши потенциальные дверные проемы для эксплуатации будут легко различимы в шаблоне, в отличие от того, что дверные проемы для эксплуатации являются поведением ПО УМОЛЧАНИЮ.
04.11.2008