Deep Insider の Tutor コーナー
>>  Deep Insider は本サイトからスピンオフした姉妹サイトです。よろしく! 
書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]

テンプレートエンジンの動作パラメーターを一元管理する(Smarty)

2014年9月2日

効率化のために、Smarty派生クラスを用意して、パラメータなどの設定はそこに押し込めてしまう方法を説明する。書籍転載の12本目(書籍内の番号は「41」)。

WINGSプロジェクト 山田 祥寛
  • このエントリーをはてなブックマークに追加

書籍転載について

 本コーナーは、技術評論社発行の書籍『PHPライブラリ&サンプル実践活用[厳選100]』の中から、特にBuild Insiderの読者に有用だと考えられる項目を編集部が選び、同社の許可を得て転載したものです。

 

 『PHPライブラリ&サンプル実践活用[厳選100]』の詳細や購入は技術評論社のサイト目次ページをご覧ください。

ご注意

 本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは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
<?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');
    }
}
リスト41-1 MySmarty.class.php
分類パラメータ概要 
フォルダ $template_dir テンプレートを保存するフォルダ ./templates
$compile_dir コンパイル済みのテンプレートを保存するフォルダ ./templates_c
$config_dir 設定ファイルを保存するフォルダ ./configs
$plugins_dir プラグインを保存するフォルダ %SMARTY_DIR%/plugins
$trusted_dir 信頼できるフォルダの配列
キャッシュ $caching テンプレート出力のキャッシュを有効にするか CACHING_OFF
設定値概要
Smarty::CACHING_LIFETIME_CURRENT 有効(現在時刻とキャッシュの有効期限を比較)
Smarty::CACHING_LIFETIME_SAVED 有効(キャッシュの生成時刻と有効期限を比較)
Smarty::CACHING_OFF 無効
$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::PHP_PASSTHRU 実行せずにそのまま出力
Smarty::PHP_QUOTE コードをHTMLエンティティとして表示
Smarty::PHP_REMOVE コードを除去
Smarty::PHP_ALLOW コードを実行
デバッグ $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パラメータに相当)
表41-1 Smartyクラスの主なパラメータ

 コンストラクタでは、Smarty標準のパラメータの他、3のように独自のプロパティを設定したり、アプリ共通で利用するテンプレート変数を設定することもできます。ここでは、データベース接続のためのオブジェクト(PDO)を準備すると共に、アプリ既定のタイトル(app_title)をテンプレート変数にセットしています。

 4は、Smarty標準のdisplayメソッドを元に新たなdメソッドを定義し、.phpファイルと同名のテンプレートを呼び出すようにしています(index.phpであれば、index.tplを自動で呼び出す)。dメソッドを利用することで、displayメソッドのように、テンプレート名を毎回指定しなくてすみますので、僅かながらコードがシンプルになります。

 以上の派生クラス(MySmarty)を呼び出しているのが、リスト41-2です。パラメータが不要になっている分だけ、コードがぐんとシンプルになっていることが見て取れます*1

PHP
<?php
require_once 'MySmarty.class.php';

$s = new MySmarty(); // パラメータの設定は不要

$s->assign('message', 'こんにちは、世界! ');
$s->d(); // 引数なしでテンプレートを特定
リスト41-2 inherit.php
  • *1 対応するinherit.tplは前項のbegin.tplと同じなので、本項では割愛しています。

※以下では、本稿の前後を合わせて5回分(第10回~第14回)のみ表示しています。
 連載の全タイトルを参照するには、[この記事の連載 INDEX]を参照してください。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
10. PDFファイルを読み込む/生成する(Zend_Pdf)

PDFファイルの読み込みや生成が容易にできるライブラリ「Zend¥Pdf」の基本的な使い方を説明する。書籍転載の10本目(書籍内の番号は「32」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
11. テンプレートエンジンでロジックとレイアウトを分離する(Smarty)

PHPで人気のテンプレートエンジン「Smarty」の基本的な使い方を説明する。書籍転載の11本目(書籍内の番号は「40」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
12. 【現在、表示中】≫ テンプレートエンジンの動作パラメーターを一元管理する(Smarty)

効率化のために、Smarty派生クラスを用意して、パラメータなどの設定はそこに押し込めてしまう方法を説明する。書籍転載の12本目(書籍内の番号は「41」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
13. テンプレートでデータ加工や条件分岐/繰り返し処理を表現する(Smarty)

関数、修飾子、演算子など、Smartyで利用できるテンプレートの個別要素について詳しく解説する。書籍転載の13本目(書籍内の番号は「42」)。

書籍転載:PHPライブラリ&サンプル実践活用[厳選100]
14. markdown形式のテキストをHTMLに変換する(PHP Markdown)

Markdown形式のファイルをHTML形式のコードに変換するためのライブラリ「PHP Markdown」の基本的な使い方を説明する。書籍転載の14本目(書籍内の番号は「38」)。

サイトからのお知らせ

Twitterでつぶやこう!