そういうことをやるなら、ロジックとデザインを分けたいですね。
ただし、これを行うために Smarty を使用する必要はありません。
優先すべきは考え方です。私は人々が Smarty で衝撃的なことを行い、最終的には Smarty でサイトを開発する人々になるのを見てきました。そして、Smarty でテンプレート エンジンを作成する必要があると判断する輝かしい火花が現れます (愚かなアイデアの可能性を決して過小評価しないでください)。
コードを 2 つの部分に分割し、標準に従うように強制すると、パフォーマンスが大幅に向上します。
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 を詳しく調べる必要があるかどうかを判断する前に、少なくともその設計されたタスクに PHP を使用してみてください。
さらに、テンプレート エンジンを使用することにした場合は、デフォルトで 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}}}
このように、搾取への入り口がデフォルトの動作であるのとは対照的に、搾取への潜在的な入り口がテンプレートで簡単に識別できます。