Smarty マニュアル

前のページ

次のページ

序文

"phpスクリプトをレイアウトから分離させるにはどうすればいいのですか?" これは間違いなく、phpメーリングリストでよく尋ねられた質問のうちの1つでしょう。 phpは、"html埋め込み型スクリプト言語"と言われていますが、phpとhtmlを混ぜ合わせたプロジェクトを2,3書いた後で、 フォームとコンテンツの分離は良いものであるというアイディアを考え出しました。 その上、多くの会社においてのレイアウトデザイナーとプログラマの役割は分担されています。 このような理由から、テンプレートソリューションの模索が始まりました。

例えば、私たちの会社においてのアプリケーション開発は次の順序で行われています。 アプリケーションの要求仕様書を作成した後、インタフェースデザイナーはインタフェースの骨組みを作成しプログラマに渡します。 プログラマーはphpによってビジネスロジックを実装し、インタフェースの骨組みを使ってテンプレートモデルを作成します。 その後、プロジェクトはとても素晴らしいテンプレートをもたらしてくれるhtmlテンプレートデザイナー/レイアウトデザイナーに 手渡されます。 このようにプロジェクトはプログラマー/デザイナーの間であちこちに何度も行き来する可能性があります。 プログラマーはhtmlを何も扱いたくないし、htmlデザイナーにphpコードの箇所をいじられたくないので、 有用なテンプレートの土台を持つ事は重要です。デザイナーは設定ファイルやダイナミックブロックのサポートや 他のインタフェースの公開が必要ですが、彼らは複雑なphp言語を扱いたくありません。

今日、phpで利用可能な多くのテンプレートソリューションを見ると、それらの大半は制限付きのダイナミックブロックの機能性や、 テンプレート内に変数を展開するための基本的な方法を提供しています。しかし、我々のニーズは 僅かにそれを上回るものを必要としました。 プログラマーはhtmlレイアウトを全く扱いたくないのですが、これはほとんど避けられませんでした。 例えば、デザイナーが背景色をダイナミックブロックによって変更したい場合、プログラマーはそれを前もって 考慮しておく必要がありました。また、我々はテンプレートに変数を割り当てるための環境設定用のファイルを扱える デザイナーを必要としました。話は続きます。

我々は1999年末からテンプレートエンジンの仕様を書き始めました。 仕様を書き終えた後、願わくばphpに統合されるようにとCで書かれたテンプレートエンジンに取り組み始めました。 その時、我々は複雑な技術的障害に直面したばかりでなく、具体的にテンプレートエンジンですべき事とすべきではない事に ついての激しい討論をしました。そしてその経験から、テンプレートエンジンはphpのクラスとして記述されるべきであると 決定したのは、誰もが使用するのに適していると考えたからです。我々はphpのクラスとしてのエンジンを書き、 そしてSmartTemplateが生まれました(注: このクラスは一般に公開されませんでした)。 これは、規則的な変数置換・他のテンプレートのインクルード・設定ファイルによる統一・phpスクリプトの埋め込み・ 制限されたifステートメントの機能性と多重ネスト可能なダイナミックブロック等、我々が必要とした全てを持ち合わせた クラスでした。ですが、むしろ全てが正規表現によって処理されるというコードは私たちには理解できませんでした。 各呼び出しごとに全てのパースと正規表現による作業を行う必要があったので、大規模なアプリケーションでは 動作が著しく遅かったのです。プログラマの観点からの最も大きな問題は、テンプレート及びダイナミックブロックを セットアップ・処理するためにphpスクリプトにおいての必要な作業でした。これをどのように、より容易に行うか?

そうして、最終的にSmartyとなったものの展望がたちました。私たちはテンプレートのパースによるオーバーヘッドを持たない phpコードがどれくらい高速に動作するかを知っています。また、我々はphpスクリプトが一般のデザイナーにとって こまごまとした高圧的なものに見える可能性がある事を知っています。そしてそれはphpよりもはるかにシンプルな テンプレート言語によって隠蔽されるかもしれません。もし我々がこの2つの強さを兼ね備えたらどうなるでしょう? このようにして"Smarty"は生まれました。

ページ上段