特集
2004/02/19 23:50:00 更新

全3回「WebプログラミングPHP言語入門」
特集:第3回 PHPを思うままに操れるようになる「MVC」と「Smarty」 (3/4)


Smartyのアドバンテージ

 前章では貧弱な出力結果で終わってしまったSmartyだが、実は数々のアドバンテージを秘めている。どのようなアドバンテージがあるのかを解説しよう。

■テンプレートの作成が容易である

 Smartyで利用するテンプレートの内容は、基本的にHTMLである(出力先のデバイスに合わせてCHTMLやHDMLを記述することも可能)。

 テンプレートの中に、「{$変数名}」という記述を行うだけで、簡単に割り当てた変数を参照できる。これに“修正子”という機能を使って、変数の内容を加工して出力することも可能である。

 テンプレートに出力する情報が多い場合、1つ1つ変数を割り当てていては、どれが目的の変数なのか把握するのが困難になる。そんな時は連想配列を使う。「{$変数名.1次元目の添字.2次元目の添字…}」といった形で参照することが可能だ。

 更に、割り当てられた変数の値によって条件分岐を行う{if}〜{/if}や、配列の内容を順番に表示するのに便利な{foreach}〜{/foreach}などの組み込み関数が用意されている。Smartyのドキュメントに詳しく記述されているので、是非色々と試してみてほしい。

■出力内容の加工が容易である

 Smartyには、テンプレートに値を割り当てるassignメソッドとテンプレートの内容からコンテンツを生成して出力するdisplayメソッドの他に、生成したコンテンツを変数として取得するfetchメソッドが存在する。実は、displayメソッドは、fetchメソッドで取得した値をecho関数でWebブラウザに出力しているに過ぎない。

 fetchメソッドを使った例を実際に確認するのはとても簡単である。先程のサンプルのview.phpをエディタで開き、23行目の"TestObject(0)"の箇所を"TestObject(1)"に変更して、スクリプトを実行してみよう。Webブラウザに表示されたコンテンツは、全角カナから半角カナに、そして文字コードはShiftJISに変換されたはずだ。

 TestView.phpは、TestObjectが持っている$deviceプロパティの値を参照し、この値が1だった時にiモード用のコンテンツとして加工している。この時に使われているのが、前述のfetchメソッドである(実際には、カプセル化のために実装したCommonViewクラスのfetchメソッドを実行しており、このメソッドがSmartyのfetchメソッドの結果を取得している)。

■クロスサイトスクリプティング対策が容易である

 Smartyの修正子には、"escape"という便利なものが存在する。この修正子の動作は、HTMLのタグや特殊な意味を持つ文字をサニタイズ(無効化)する働きがある。これを用いると、JavaScriptなどを使ったクロスサイトスクリプティング(他人のCOOKIEを不正に入手するなどの行為)を簡単に防御できる。

 しかし、表示したい全ての変数に対してこの修正子を記述する方法では、うっかりサニタイズを忘れてしまった場合を考えると非常に危険である。Smartyでは、そういったケースを想定して、デフォルトの修正子を定義できるようになっている。

 CommonView.phpの16行目の行頭にある"//"を取り除いてみよう。これで、全ての変数が自動的にサニタイズされる。もし、HTMLを直接出力したい(=サニタイズしたくない)箇所は、"smarty:nodefault"という修正子を用いると良い。

Smartyの導入事例

 ここまでで、Smartyとはどのようなものであるかを(漠然とでも)理解していただけたと思う。だが、いくら勉強しても、もしSmartyがマイナーな存在であれば、折角の努力も報われない。その不安を払拭するためにも、実際にSmartyが導入されているソフトウェアとシステムを紹介しよう。

■XOOPS

 コミュニティサイトを構築するためのソフト。PHP+MySQLで構成されており、テンプレートの仕組みにSmartyが用いられている。同じカテゴリのソフトウェアの中では、知名度および普及率が高い。

■楽天

 PHP+MySQL+Smartyという構成で多くのサービスを提供している。PHPを用いたサービスとしては、国内では最大規模であろう。PHPが実用に耐えうるだけの言語であるという事を証明する好例でもある。

 この他にも、XOOPSを導入しているサイトなどを含めると、かなりのサイトがSmartyを導入している事になる。この事から考えても、Smartyは、PHPではスタンダードなテンプレートエンジンであると言えよう。

 次章からは、開発の重要な要素である“デバッグ”について解説する。

前のページ | 1 2 3 4 | 次のページ

[照井進吾,ITmedia]

Copyright © ITmedia, Inc. All Rights Reserved.