Smarty とは? (はじめに) - PHPプロ!マニュアル
はじめに - Smarty とは?
第 1章Smarty とは?
Smarty は PHP のためのテンプレートエンジンです。具体的に言うと、php のプレゼンテーションからアプリケーションのロジックとコンテンツを分離して管理する事を容易にします。 これは、プログラマーとテンプレートデザイナーの役割が異なり、 これらの役割を違う人間が受け持っている場合に最適だと言えます。
例えば、新聞記事を表示するwebページを作成しているとします。
-
記事の $headline (見出し)、$tagline (キャッチフレーズ)、$author (著者) および $body (本文) が中身を構成する要素となります。 ここには、それをどのように表示するかという情報は含まれません。 これらはアプリケーションによって Smarty に 渡されます 。
-
テンプレートデザイナーはこのテンプレートを編集し、 HTML タグや テンプレートタグ を使用して、これらの 変数 と要素 (テーブル、div、背景色、フォントサイズ、スタイルシート、svg など) の体裁を調整します。
-
ある日、プログラマーが (アプリケーションロジックを変更したなどの理由で) 記事の内容を取得する手段を変更する必要が出てきたとします。 この変更はテンプレートデザイナーに影響がないため、 記事には全く同じ内容のテンプレートが適用できるでしょう。
-
同様に、もしテンプレートデザイナーがテンプレートを完全に作り直したい場合でも、 アプリケーションロジックを変更する必要がありません。
-
したがって、プログラマーはテンプレートを作り直す事なくアプリケーションロジックを変更する事ができ、 テンプレートデザイナーはアプリケーションロジックを壊す事なくテンプレートを変更できます。
Smarty の設計の目標の一つとして、 ビジネスロジックとプレゼンテーションロジックの分離があります。
-
これは、プレゼンテーションのためだけという条件の下で テンプレートにロジックを含める事が可能であるという事です。 他のテンプレートを include したり、テーブル行の色を 変更 したり、変数を 大文字 にしたり、データの配列を ループ させたり、それを 表示 したりといったことが、プレゼンテーションロジックの例になります。
-
これは、Smarty がビジネスロジックとプレゼンテーションロジックの分離を 強制している訳ではない事を意味しています。 Smarty はテンプレート内に置かれたものがビジネスロジックなのか何なのか全くわかりません。
-
また、テンプレートにロジックを 置きたくない ならば、テキストと変数のみでコンテンツを作り上げることも可能です。
Smarty のユニークな特徴の一つは、テンプレートをコンパイルすることです。 つまり、Smarty がテンプレートファイルを読み込み、 それをもとにして PHP スクリプトを作成するということです。 一度作成してしまえば、その後はコンパイルされた PHP スクリプトが実行されるので、 各リクエスト時にテンプレートファイルのパースによるオーバーヘッドがありません。 さらに各テンプレートは、 eAccelerator 、 ionCube 、 mmCache あるいは Zend Accelerator のような PHP コンパイラやキャッシュソリューションを最大限に活用することができます。
Smarty の特徴
-
非常に高速
-
下仕事は PHP パーサが行うので能率的
-
コンパイルは一度だけ行われるので、テンプレートのパースによるオーバーヘッドが無い
-
再コンパイル は変更があったテンプレートファイルのみで行うのでスマート
-
テンプレートの {デリミタ} タグの記法を変更し、 {$foo} 、{{$foo}} 、 <!--{$foo}--> などを使用することが可能
-
{if}..{elseif}..{else}..{/if} 構文は PHP パーサが処理するので、{if...} の条件式にはシンプルなものから複雑なものまで自由に指定可能
-
sections や if's などは無制限にネスト可能
-
テンプレートファイル内に PHP コードを埋め込む ことも可能。しかし、エンジン自体が カスタマイズ できるので、 これはおそらく不要 (そして非推奨)。
-
組み込みで キャッシュ機能 をサポート
-
任意の テンプレート ソース
-
カスタム キャッシュハンドラ 関数
-
プラグイン 機構



ページのトップへ


kende様のご指摘通り、三項演算子を使用する際には、コードの複雑度などを考慮する必要がありますね。書きやすさと共に可読性も追求したいところですね。