【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
今から始める MySQL入門

今から始める MySQL入門(11)

Smartyでテンプレートエンジンの威力を知る



鶴長 鎮一(book@tsurunaga.jp)
2007/10/9

今から始める MySQL入門 テンプレートが果たす役割

 改まったビジネス文書や手紙の作成にはしばしば、テンプレートが利用されます。テンプレートに差出人や相手方の情報を入力するだけで、気の利いた季節のあいさつや丁寧な結びの句を織り交ぜた文書を簡単に作成することができます。

 さて、PHPはHTMLタグとPHPコードが共存できることを特徴とし、多くの利用者を獲得してきました。しかしPHPコードが冗長になるにつれ、HTMLの記述が複雑になり、デザインの修正が難しくなる傾向があります。

 そこでPHPにおいても、文書テンプレートのアイデアを取り入れた「テンプレートエンジン」が利用されます。

 テンプレートエンジンを利用すれば、PHPコードで作られたロジックが吐き出す値を、HTMLデザインを分離したテンプレートに埋め込むことが可能になります。この結果、ロジックを作成する作業と、HTMLデザインを編集する作業を分担して行うことが可能になります。

今から始める MySQL入門 テンプレートエンジン「Smarty」の特徴


 PHPのテンプレートエンジンとして広く利用されているものの1つに「Smarty」が挙げられます。

関連リンク:
Smarty日本語マニュアル
http://smarty.php.net/manual/ja/

 Smartyで使用するテンプレートでは、単に値をはめ込むだけでなく、if文による条件分岐やforeachによるループ処理など、必要最低限の制御構造や組み込み関数が利用可能です。もちろんこうした機能の利用は必須ではなく、HTMLテキストと単純な変数のみでテンプレートをまとめることもできます。

 またSmartyは動作速度の面でも秀でています。最初にリクエストが発生した際に、テンプレートファイルを実行可能なPHPスクリプトにコンパイルし、その後のリクエストではコンパイルされたPHPスクリプトを再利用します。テンプレートに変更が加えられたときにのみコンパイルを再実行するなど効率面でも優れています。

 ほかにも、キャッシュ機能を搭載するなど、PHP本来のパフォーマンスを損なうことなく、ロジックとデザインを分離することができます。Smartyの詳細については、先に挙げたURLを参考にしてください。

図1 Smartyによるロジック作業とデザイン作業の分離

 Smartyの多機能さを見ると、難解なコードや複雑なインストール作業を予想し、尻込みするかもしれませんが、導入や利用は至って容易です。新規のインストールはもちろん、既存のPHPコードに導入することもできます。

 以下、Smartyの簡単なサンプルを用いて、その基本機能を紹介します。

今から始める MySQL入門 Smartyとsample8のインストール


Smartyのインストール

 Smartyの公式サイト(http://smarty.php.net/download.php)からソースアーカイブをダウンロードし、展開します。展開後、ソースアーカイブに含まれるlibsディレクトリごと、「/usr/local/lib/」などApache HTTPのデーモン権限で読み出し可能なディレクトリに移動します。

# tar xvfz Smarty-2.6.18.tar.gz
# mv Smarty-2.6.18/libs /usr/local/lib/smarty

 Smartyの基本インストールは以上です。

 後はコンテンツごとにSmartyが利用する作業ディレクトリを作成します。これらの作業ディレクトリの中には、テンプレートを設置するディレクトリのほか、コンパイルで作成されるPHPコードの展開先ディレクトリが含まれます。Smartyを利用するには、次のいずれかの方法でSmarty.class.phpを読み込みます。

<?php
define('SMARTY_DIR', '/usr/local/lib/php/Smarty/');
require_once(SMARTY_DIR . 'Smarty.class.php');
...省略...
?>
■手動でSMARTY_DIR定数を定義する場合

<?php
require_once('/usr/local/lib/smarty/Smarty.class.php');
...省略...
?>
■ライブラリファイルの絶対パスを指定する場合

 ほかに、「/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)についても同様です。

サンプルダウンロード:
sample8のtarアーカイブ

サンプル「sample8」をドキュメントルートに展開し、作業ディレクトリを移動する。下のドキュメントルートはFedoraやRed HatなどRPMインストールした場合の例。適宜変更する
# cd /var/www/html
# tar xvfz /..pathto../sample8.tgz

Smartyの動作に必要な各ディレクトリのオーナー(Apache HTTPデーモンのUser/Groupを指定*注)やパーミッションを設定
# cd sample8
# chown apache.apache templates_c
# chmod 770 templates_c
# chown apache.apache cache
# chmod 770 cache

*注:Apache HTTPデーモンのUser/Groupは「nobody」や「www」などインストール方法により異なります。httpd.confで確認することができます

第10回へ
1/3

Index
今から始める MySQL入門(11)
 Smartyでテンプレートエンジンの威力を知る
Page 1
 テンプレートが果たす役割
 テンプレートエンジン「Smarty」の特徴
 Smartyとsample8のインストール
   Smartyのインストール
   sample8のインストールと動作確認
  Page 2
 Smartyとsample8のインストール(2)
 Smartyの機能を知る
   Smartyの基本「smarty1.php/template1.tpl」
   ループ処理と配列「smarty2.php/template2.tpl」
  Page 3
  Smartyの機能を知る(2)
   ループ処理と連想配列「smarty3.php/template3.tpl」
   foreachのネスト(入れ子)「smarty4.php/template4.tpl」「smarty5.php/template5.tpl」

連載 今から始める MySQL入門


 Linux Squareフォーラム データベース関連記事
連載:快速MySQLでデータベースアプリ!(全11回)
軽快な動作で知られるRDBMS、MySQLでDBアプリの構築を行う。MySQLのインストールに始まり、PerlやRubyなどのスクリプトでデータベースを操作する方法までを完全解説
連載:今から始める MySQL入門(連載中)
定番のLAMP(Linux+Apache+MySQL+PHP)構成でWebアプリケーション開発に挑戦! サンプルアプリの構築を進めながら、基礎知識や操作方法について詳しく解説する
連載:Oracleマイスター養成講座(全6回)
本連載では、Oracleの管理・チューニング方法を紹介していく。これからOracleを始める人、そしてOracleをより深く理解したい人のための、一歩踏み込んだ実用講座
連載:DB2マイスター養成講座(全7回)
本連載では、DB2 UDBの実践的な運用・管理方法を紹介していく。DB2を利用するうえで必要な知識を、実運用を前提にDB2のプロが解説
特集:エンタープライズ市場に向かうMySQL 5.0[前編]
MySQL 5.0の新機能をアルファ版でチェック
1月に公開された5.0アルファ版は大幅に拡張されており、エンタープライズ市場への進出を予感させる
特集:Linuxで動くリレーショナルデータベース・カタログ
データベースサーバのOSとしてLinuxを採用するケースが増えている。Linuxで動作する7つの主なリレーショナルデータベースを紹介する。製品導入の際の参考にしてほしい

MONOist組み込み開発フォーラムの中から、Linux関連記事を紹介します

ホワイトペーパーTechTargetジャパン

Linux Square フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)



- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

  @IT「Windows 7」 特設サイトオープン!
最新情報・移行ノウハウを公開しています