(注:記事は執筆時の情報に基づいており,現在では異なる場合があります)

 ステップ1~7まで読んできて,Webアプリケーションを一度でも作ったことのある方なら,PHPに不満を感じたかもしれません。その不満の一つが,処理ロジックとコンテンツ(HTMLタグなど)を一つのファイルに書くという点でしょう。ステップ8では,処理ロジックとコンテンツを分離する「テンプレート」について解説しましょう。

図1●C:\php\Smartyの下にフォルダも含めてコピー
図2●通常のPHPスクリプトと,Smartyを使った場合の違い
図3●リスト1と2の実行結果
リスト1
リスト2
リスト3
 プログラマとWebデザイナが共同作業するケースを想像してみてください。PHPスクリプトの,どこまでがプログラマの担当で,どこからがデザイナの担当か区別しにくいですよね。そこで考え出されたのが,デザイナが書くコンテンツ部分を「テンプレート」として,プログラマが書く処理ロジックと分離する技術です。

ポイント1
Smartyはフリーのテンプレート・エンジン

 PHPには,Fast Templateなどフリーのテンプレートの実装がいくつかあります。その中でも最近,最も注目されているのがテンプレート・エンジンSmartyでしょう。エンジンといっても,実体はPHPのクラスなので,インストール作業は,所定のフォルダを作成し,PHPの実行環境から読み出せるようにするだけです。

 ここでは,現在のバージョン2.3.1をWindows環境にインストールする方法を簡単に紹介しておきます。

1)Webサイト(http://smarty.php.net/)からSmarty-2.3.1.tar.gzをダウンロードして展開

2)C:\php\Smartyフォルダを作成し,展開したフォルダの中身を下位のフォルダも含めてC:\php\Smartyにコピー(図1[拡大表示])

3)C:\WINNT\php.iniの中を「include_path」という文字列で検索し,コメント記号の;(セミコロン)を外して,include_path = の後に,".;c:\php\pear;c:\php\Smarty"と追加

4)PHPスクリプトの実行用フォルダ(C:\Program Files\Apache Group\Apache\htdocs\sample)の下に,templates,templates_c,configs,cacheの四つのフォルダを作成

5)Apacheのサービスを再起動

これで,Smartyが利用可能になります。

ポイント2
tplファイルとphpファイルでWebアプリケーションを実行する

 テンプレート・プログラミングでは前述のように,PHPスクリプトをテンプレートと処理ロジックに分離します。Smartyの場合,テンプレート・ファイルは拡張子 .tplのファイルで,前述のtemplatesフォルダに配置します。これに対し処理ロジックは拡張子 .phpのファイルで,これまで通りPHPスクリプトの実行用フォルダに置きます。

 リスト1[拡大表示]がテンプレートのコード例です。PHPのコードがどこにも書いてありませんね。一見,ただのHTMLコードのようですが,{$name}などと{ }で囲まれたものがあります。これがテンプレート上で扱う変数(テンプレート変数)です。このテンプレート変数に処理ロジックから値を代入するわけです。

 リスト2[拡大表示]は,リスト1のテンプレートに対応する処理ロジックを記述したPHPスクリプトです。このようにSmartyでは,処理ロジック側でSmartyクラスのオブジェクトを生成し,そのオブジェクトのメソッドを使って,テンプレートを呼び出すように記述します(図2[拡大表示])。コードを見てみましょう。(1)でSmarty本体のクラスをロードし,(2)でSmartyクラスのオブジェクト$mySmartyを生成しています。(3)ではassign( )メソッドで日経ソフトウエアという文字列をテンプレート変数nameに設定。また(4)は,いったん変数$sdate,$mtypeに値を代入してから,assign( )メソッドを実行する例です。(5)は配列を使った場合のコードで,複数の値をテンプレート変数に設定しています。そして(6)で,display( )メソッドを使ってリスト1のtest.tplを呼び出しています。

 ではリスト1をtemplatesフォルダに,リスト2をこれまで通り実行用フォルダに配置して,ブラウザからhttp://127.0.0.1/sample/testsmarty.phpにアクセスしてみましょう。テンプレート変数部分に,リスト1でassign( )した値が代入されていますね(図3[拡大表示])。配列変数$itemに格納した値が,リスト1(1)の{section}ループで展開されていることもわかるでしょう。

 このようにSmartyを使うと,Webデザイナはテンプレート・ファイル,プログラマはPHPスクリプトと,それぞれの作業を分担して進めることができるのです。

ポイント3
Smartyには便利な関数もある

 基本的な使い方がわかったところで,もう少しSmartyのスマートな使い方を見てみましょう。Smartyには,テンプレート・ファイルで使うための便利な関数がいくつか用意されているのです。

 リスト3[拡大表示]のテンプレート・ファイルを見てください。リスト1と大きく違うのは,(1)と(5)でそれぞれ別のテンプレート・ファイルをinclude関数で読み込んでいる点でしょう。このようにテンプレート・ファイルで関数を使う場合は,{関数名 属性=~}と記述します。

XOOPSで簡単ポータル・サイト開発

図A●XOOPSのインストール途中の画面
 テンプレート・プログラミングを学ぶと,もっと手軽にWebアプリケーションを開発したいと思えてきますよね。そんな方にうってつけのフリーソフトがあります。XOOPS(決まった読み方はないが,ズープスと読む人が多い)です。

 XOOPS(eXtensible Object Oriented Portal System)は,PHPとMySQLをベースにした無償のポータル・サイト開発キットで,ユーザー管理やコンテンツ管理機能のほか,掲示板やニュース記事投稿システムなどを容易に開発できる機能を備えています。XOOPS日本公式サイト(http://jp.xoops.org/)から圧縮ファイルをダウンロードすれば,インストールも簡単です(図A[拡大表示])。興味のある方は,ぜひ挑戦してみてください。



(真島 馨=日経ソフトウエア)


(次回に続く)