SmartyはPHPのためのテンプレートエンジンです。より明確にphpのプレゼンテーションからアプリケーションの ロジックとコンテンツを分離して管理する事を容易にします。これはプログラマーとテンプレートデザイナーの役割が異なる 状況か、たいていの場合は同じ人間ではないのが最良だという事です。 例えば、新聞記事を表示するwebページを作成しているとします。 記事のヘッドライン・キャッチフレーズ・著者・本文を要素として満たし、それらがどのように提供されたかの情報は 含みません。 これらはアプリケーションによってSmartyの中に渡され、テンプレートデザイナーはこれらの要素 の体裁(HTMLテーブル・背景色・フォントサイズ・スタイルシール等)を整形するために HTMLタグとテンプレートタグの組み合わせを使ってテンプレートを編集します。 ある日、プログラマーは(アプリケーションロジックを変更して)記事の内容が回収される手段を 変更する必要がでてきました。この変更はテンプレートデザイナーに影響せず、 今までどおりの全く同じ内容のテンプレートになるでしょう。 同様に、もしテンプレートデザイナーがテンプレートを完璧にリデザインしたい場合でも、 アプリケーションロジックを変更する必要がありません。したがって、プログラマーはテンプレートを作り直す事なく アプリケーションロジックを変更する事ができ、テンプレートデザイナーはアプリケーションロジックを壊す事なく テンプレートを変更できます。
Smartyの設計の目標の一つとしてビジネスロジックとプレゼンテーションロジックの分離があります。 これは、プレゼンテーションのためだけという条件の下でテンプレートにロジックを含める事が可能であるという事です。 プレゼンテーションロジックの例といえば、他のテンプレートをincludeしたり、テーブル行の色を変えてみたり、 変数を大文字にしてみたり、データの配列を通してループさせたり、またそれを表示したりといったような事です。 これは、Smarty がビジネスロジックとプレゼンテーションロジックの分離を強制している訳ではない事を意味しています。 Smarty はテンプレート内に置かれたものがビジネスロジックなのか何なのか全く知らないのです。 テンプレートにロジックを置きたくないならば、あなた自身がテキストと変数のみでコンテンツをまとめる事で成す事が出来ます。
Smartyのユニークな特徴の一つは、最初のリクエスト時にテンプレートファイルを 実行可能なPHPスクリプトにコンパイルする事です。その後はコンパイルされたPHPスクリプトが 実行されるので、各リクエスト時にテンプレートファイルのパースによるオーバーヘッドがありません。 さらに各テンプレートは、Zend Accelerator (http://www.zend.com/) や APC (http://www.php-accelerator.co.uk) のような、 PHPのパフォーマンスを向上するためのソリューションを最大限に利用する事ができます。
Smarty の特徴:
非常に高速
下仕事はPHPパーサが行うので能率的
コンパイルは一度だけ行われるので、テンプレートのパースによるオーバーヘッドが無い
変更されたテンプレートファイルのみ再コンパイルを行うのでスマート
テンプレート言語の開始と終端を表すデリミタタグの記法を変更可能 (例: { }, {{ }}, <!--{ }-->, 等)
if/elseif/else/endif ステートメントはPHPパーサに渡されて処理されるので、{if ...}の条件式には シンプルな式から複雑な式まで自由に指定可能
section, if等は無制限にネスト可能
テンプレートエンジンはカスタマイズできるので必要ない(又は推奨されない)かもしれないが、 テンプレートファイルにPHPコードを埋め込む事が可能
キャッシュ機能をサポート
テンプレートリソースのサポート
カスタムキャッシュハンドラ関数
プラグイン構造