テンプレートが果たす役割
改まったビジネス文書や手紙の作成にはしばしば、テンプレートが利用されます。テンプレートに差出人や相手方の情報を入力するだけで、気の利いた季節のあいさつや丁寧な結びの句を織り交ぜた文書を簡単に作成することができます。
さて、PHPはHTMLタグとPHPコードが共存できることを特徴とし、多くの利用者を獲得してきました。しかしPHPコードが冗長になるにつれ、HTMLの記述が複雑になり、デザインの修正が難しくなる傾向があります。
そこでPHPにおいても、文書テンプレートのアイデアを取り入れた「テンプレートエンジン」が利用されます。
テンプレートエンジンを利用すれば、PHPコードで作られたロジックが吐き出す値を、HTMLデザインを分離したテンプレートに埋め込むことが可能になります。この結果、ロジックを作成する作業と、HTMLデザインを編集する作業を分担して行うことが可能になります。
テンプレートエンジン「Smarty」の特徴
PHPのテンプレートエンジンとして広く利用されているものの1つに「Smarty」が挙げられます。
Smartyで使用するテンプレートでは、単に値をはめ込むだけでなく、if文による条件分岐やforeachによるループ処理など、必要最低限の制御構造や組み込み関数が利用可能です。もちろんこうした機能の利用は必須ではなく、HTMLテキストと単純な変数のみでテンプレートをまとめることもできます。
またSmartyは動作速度の面でも秀でています。最初にリクエストが発生した際に、テンプレートファイルを実行可能なPHPスクリプトにコンパイルし、その後のリクエストではコンパイルされたPHPスクリプトを再利用します。テンプレートに変更が加えられたときにのみコンパイルを再実行するなど効率面でも優れています。
ほかにも、キャッシュ機能を搭載するなど、PHP本来のパフォーマンスを損なうことなく、ロジックとデザインを分離することができます。Smartyの詳細については、先に挙げたURLを参考にしてください。
Smartyの多機能さを見ると、難解なコードや複雑なインストール作業を予想し、尻込みするかもしれませんが、導入や利用は至って容易です。新規のインストールはもちろん、既存のPHPコードに導入することもできます。
以下、Smartyの簡単なサンプルを用いて、その基本機能を紹介します。
Smartyとsample8のインストール
Smartyのインストール
Smartyの公式サイト(http://smarty.php.net/download.php)からソースアーカイブをダウンロードし、展開します。展開後、ソースアーカイブに含まれるlibsディレクトリごと、「/usr/local/lib/」などApache HTTPのデーモン権限で読み出し可能なディレクトリに移動します。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Smartyの基本インストールは以上です。
後はコンテンツごとにSmartyが利用する作業ディレクトリを作成します。これらの作業ディレクトリの中には、テンプレートを設置するディレクトリのほか、コンパイルで作成されるPHPコードの展開先ディレクトリが含まれます。Smartyを利用するには、次のいずれかの方法でSmarty.class.phpを読み込みます。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
ほかに、「/etc/php.ini」を編集してinclude_pathにライブラリディレクトリを追加する方法や、ApacheのドキュメントルートやPHPスクリプトと同じディレクトリにライブラリを展開する方法もあります。ただし本稿では、「手動でSMARTY_DIR定数を定義する場合」を基に解説を加えていきます。
sample8のインストールと動作確認
こちらからサンプルアーカイブ「sample8.tgz」をダウンロードし、Apache HTTPデーモン(Apache HTTPD)のドキュメントルート(*注)など、PHPが動作するディレクトリに展開し、作業ディレクトリを移動します。
注:ソースからデフォルトインストールした場合は/usr/local/apache2/htdocs、FedoraやRed hatなどRPMインストールした場合は/var/www/htmlなど
Smartyを動作させるには、PHPスクリプトとテンプレート以外に、4つのディレクトリ(tempalates/templates_c/configs/cache)を必要とします。これらのディレクトリはサーバ単位ではなく、コンテンツ単位で用意することが推奨されています。
sample8にもこれらのディレクトリが含まれていますが、各ディレクトリのオーナーやパーミッションを再設定する必要があります。Smartyのコンパイル処理はApache HTTPDデーモンの権限で実行されるため、コンパイル済みのPHPコードが保存されるディレクトリ(templates_c)は、Apache HTTPDの権限で読み込み/書き込みができるよう設定します。キャッシュデータが保存されるディレクトリ(cache)についても同様です。
*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***
Copyright © ITmedia, Inc. All Rights Reserved.