Если вы собираетесь делать вещи таким образом, вы хотите отделить свою логику и дизайн, правда.
Но вам не нужно использовать 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. Проблема в том, что $ опасных_значений может быть произвольным HTML, и это просто приводит к еще более плохим практикам кодирования с неразборчивым спагетти-кодом повсюду.
Любой язык шаблонов, который вы считаете , должен удовлетворить эту проблему. например:
{$code_gets_escaped}
{{$code_gets_escaped_as_a_uri}}
{{{$dangerous_bare_code}}}
Таким образом, ваши потенциальные дверные проемы для эксплуатации легко различимы в шаблоне, в отличие от дверного проема для эксплуатации, представляющего собой поведение DEFAULT .