書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
テンプレートエンジンの動作パラメーターを一元管理する(Smarty)
効率化のために、Smarty派生クラスを用意して、パラメータなどの設定はそこに押し込めてしまう方法を説明する。書籍転載の12本目(書籍内の番号は「41」)。
書籍転載について
ご注意
本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどはBuild Insiderのそれとは一致しません。あらかじめご了承ください。
Smartyを利用するたびに、template_dir、compile_dirなどの決まりきったパラメータをいちいち設定するのは面倒なことです。そこで、より実践的なアプリでは、Smarty派生クラスを用意して、パラメータなどの設定はそこに押し込めてしまうのが一般的です。これによって、個別のコードをよりシンプルに表せるようになります。
- 名称: Smarty
- URL: http://www.smarty.net/
- インストール方法: include_path に設置/ Composer
- ファイル: Smarty.class.php
Smarty派生クラスの基本
具体的なコードをリスト41-1に示します。アプリ固有のパラメータ(Smartyのプロパティ)は、コンストラクタで設定します(1)。よく利用するプロパティを表41-1に示しますので、必要に応じて追加/削除してください。なお、プロパティを設定するに先立って、Smartyクラス本体のコンストラクタを呼び出しておく必要があります(2)。さもないと、正しくSmartyが動作しないので注意してください。
<?php
require 'libs/Smarty.class.php';
class MySmarty extends Smarty {
private $_db;
// 1アプリ固有のパラメータを設定
public function __construct() {
// 2基底クラスのコンストラクタを実行
parent::__construct();
$this->template_dir = './templates'; // テンプレートの格納先
$this->compile_dir = './templates_c'; // コンパイル結果の格納先
$this->config_dir = './configs'; // 設定ファイルの格納先
$this->cache_dir = './cache'; // キャッシュの格納先
$this->default_modifiers = array('escape:"htmlall"'); // デフォルトの修飾子
// 3独自のテンプレート変数&プロパティを設定
$this->assign('app_title', 'Smartyサンプル'); // 変数app_titleの設定
try {
$this->_db = new PDO(
'mysql:dbname=phpmook;host=127.0.0.1;charset=utf8',
'mookusr', 'mookpass'); // pdoオブジェクトの準備
} catch (PDOException $e) {
die($e->getMessage());
}
}
// _dbプロパティ(pdoオブジェクト)のゲッターメソッド
public function getDb() {
return $this->_db;
}
// 4displayメソッドを元に、新たなdメソッドを定義
public function d() {
parent::display(basename($_SERVER['PHP_SELF'], '.php').'.tpl');
}
}
|
分類 | パラメータ | 概要 | |
---|---|---|---|
フォルダ | $template_dir | テンプレートを保存するフォルダ | ./templates |
$compile_dir | コンパイル済みのテンプレートを保存するフォルダ | ./templates_c | |
$config_dir | 設定ファイルを保存するフォルダ | ./configs | |
$plugins_dir | プラグインを保存するフォルダ | %SMARTY_DIR% |
|
$trusted_dir | 信頼できるフォルダの配列 | - | |
キャッシュ | $caching | テンプレート出力のキャッシュを有効にするか | CACHING_OFF |
設定値 | 概要 | ||
Smarty:: |
有効(現在時刻とキャッシュの有効期限を比較) | ||
Smarty:: |
有効(キャッシュの生成時刻と有効期限を比較) | ||
Smarty:: |
無効 | ||
$cache_dir | キャッシュを保存するフォルダ | ./cache | |
$cache_lifetime | キャッシュの有効期限 | 3600 | |
$cache_modified_check | If-Modified-Sinceヘッダによる判定を行うか | FALSE | |
コンパイル | $compile_check | テンプレートの更新によって再コンパイルするか | TRUE |
$force_compile | テンプレート実行時に常にコンパイルするか | FALSE | |
$default_modifiers | デフォルトで適用される修飾子 | array() | |
$php_handling | テンプレート内部のPHPコードの扱い | PHP_PASSTHRU | |
設定値 | 概要 | ||
Smarty:: |
実行せずにそのまま出力 | ||
Smarty:: |
コードをHTMLエンティティとして表示 | ||
Smarty:: |
コードを除去 | ||
Smarty:: |
コードを実行 | ||
デバッグ | $debugging | デバッギングコンソールを有効にするか | FALSE |
$debugging_ctrl | クエリ情報SMARTY_DEBUGが指定された場合に、デバッギングコンソールを有効にするか(URL/NONE) | NONE | |
デリミタ | $auto_literal | 「{」「}」の前後に空白がある場合、デリミタを無視するか | TRUE |
$left_delimiter | 左のデリミタ | { | |
$right_delimiter | 右のデリミタ | } | |
その他 | $config_booleanize | 設定ファイルのon/true/yes、off/false/noをboolean値に変換するか | TRUE |
$config_overwrite | 同名の設定パラメータを上書きするか | TRUE | |
$error_reporting | エラー通知レベル(php.iniのerror_reportingパラメータに相当) | - |
コンストラクタでは、Smarty標準のパラメータの他、3のように独自のプロパティを設定したり、アプリ共通で利用するテンプレート変数を設定することもできます。ここでは、データベース接続のためのオブジェクト(PDO)を準備すると共に、アプリ既定のタイトル(app_title)をテンプレート変数にセットしています。
4は、Smarty標準のdisplayメソッドを元に新たなdメソッドを定義し、.phpファイルと同名のテンプレートを呼び出すようにしています(index.phpであれば、index.tplを自動で呼び出す)。dメソッドを利用することで、displayメソッドのように、テンプレート名を毎回指定しなくてすみますので、僅かながらコードがシンプルになります。
以上の派生クラス(MySmarty)を呼び出しているのが、リスト41-2です。パラメータが不要になっている分だけ、コードがぐんとシンプルになっていることが見て取れます*1。
<?php
require_once 'MySmarty.class.php';
$s = new MySmarty(); // パラメータの設定は不要
$s->assign('message', 'こんにちは、世界! ');
$s->d(); // 引数なしでテンプレートを特定
|
- *1 対応するinherit.tplは前項のbegin.tplと同じなので、本項では割愛しています。
※以下では、本稿の前後を合わせて5回分(第10回~第14回)のみ表示しています。
連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。
10. PDFファイルを読み込む/生成する(Zend_Pdf)
PDFファイルの読み込みや生成が容易にできるライブラリ「Zend¥Pdf」の基本的な使い方を説明する。書籍転載の10本目(書籍内の番号は「32」)。
11. テンプレートエンジンでロジックとレイアウトを分離する(Smarty)
PHPで人気のテンプレートエンジン「Smarty」の基本的な使い方を説明する。書籍転載の11本目(書籍内の番号は「40」)。
12. 【現在、表示中】≫ テンプレートエンジンの動作パラメーターを一元管理する(Smarty)
効率化のために、Smarty派生クラスを用意して、パラメータなどの設定はそこに押し込めてしまう方法を説明する。書籍転載の12本目(書籍内の番号は「41」)。
13. テンプレートでデータ加工や条件分岐/繰り返し処理を表現する(Smarty)
関数、修飾子、演算子など、Smartyで利用できるテンプレートの個別要素について詳しく解説する。書籍転載の13本目(書籍内の番号は「42」)。
14. markdown形式のテキストをHTMLに変換する(PHP Markdown)
Markdown形式のファイルをHTML形式のコードに変換するためのライブラリ「PHP Markdown」の基本的な使い方を説明する。書籍転載の14本目(書籍内の番号は「38」)。