自分用のclassを作る

設定が面倒だ

Smartyのクラス変数は、結構あるのでSmartyを使う度に設定するのは、煩わしい気もします。

設定が面倒だ...
<?
require_once './smarty/Smarty.class.php';  // Smarty classを読込む

$smarty = new Smarty();  // Smarty classの生成

$smarty->template_dir  = './smarty/templates';
$smarty->compile_dir   = './smarty/templates_c';
$smarty->cache_dir     = './smarty/cache';
$smarty->config_dir    = './smarty/configs';
$smarty->security      = true;
$smarty->caching       = 1;
     以下続く
	

Smartyを使いなれてくると設定するパラメータも限られてくるので、サブクラスを作成して、これらの設定をまとめた方が便利になるかと思います。

Smartyクラス変数

サブクラス作成時に必要と思われる、Smartyのクラス変数を一覧にしてまとめてみました。

変数名 意味
$template_dir デフォルトのテンプレートディレクトリ名です。初期値は./templates
このディレクトリをwebサーバのドキュメントルート下に設定する事を推奨しません。
$compile_dir コンパイルされたテンプレートが置かれるディレクトリです。初期値は./templates_c
このディレクトリをwebサーバのドキュメントルート下に設定する事を推奨しません。
$config_dir 設定ファイル を置くディレクトリです。。初期値は./configs
このディレクトリをwebサーバのドキュメントルート下に設定する事を推奨しません。
$debugging デバッギングコンソール を有効にします。
$autoload_filters 全てのテンプレート呼出し時に適用したいフィルタがある場合、この変数に指定するとSmartyはそれらを自動的に読み込みます。
$compile_check 値がTRUEならば、テンプレートをチェックし、タイムスタンプが新しければコンパイルを行ないます。初期値はTRUEです。
$force_compile テンプレートが呼び出される毎に強制的にコンパイルを行います。 この設定は、$compile_check をオーバーライドします。
$caching テンプレートの出力を $cache_dir にキャッシュするかどうかを設定します。
  • 0 をセットした場合、キャッシュは無効です。
  • 1 をセットした場合、キャッシュが期限切れかどうかを調べるために、 現在の時間と $cache_lifetime の値を比較するように指示します。
  • 2 をセットした場合、キャッシュが生成された時点の時間と $cache_lifetime の値を比較するように指示します。
$cache_dir テンプレートのキャッシュが格納されるディレクトリです。初期値は./cache
$cache_lifetime テンプレートのキャッシュの期限(単位:秒)。これが切れるとキャッシュは再生成されます。初期値は3600秒です。
  • $cache_lifetimeを使用するには、 $cachingを有効にする必要があります。
  • -1 にすると、キャッシュを無期限で有効とします。
  • 0 にすると、キャッシュを常に再生成します
$cache_modified_check クライアントから送信された If-Modified-Since ヘッダを尊重します。
キャッシュファイルが変更無い場合、304: Not Modifiedレスポンスが返されます。
これは、キャッシュされた内容に{insert}タグが無い時に機能します。
$security TRUEまたはFALSEとなり、デフォルトはFALSEです。これは、テンプレート言語によってシステムのセキュリティが脆弱になる危険性を減らしたい場合に最適です。
$secure_dir セキュアであるとみなすローカルファイルやディレクトリを格納する配列です。
$security_settings $securityが有効な場合に、セキュリティ設定の指定やオーバーライドを行います。
$left_delimiter テンプレート言語の開始を表すデリミタです。初期値は{です。
$right_delimiter テンプレート言語の終端を表すデリミタです。初期値は}です。
$compile_id コンパイルファイルを識別するためのid
$use_sub_dirs TRUEに設定すると、テンプレートディレクトリとキャッシュディレクトリの下にサブディレクトリを作ります。

自分用クラスの作成

Smartyの自分用クラスとして、MySmarty.class.phpを作成してみました。

MySmarty.class.php
<?
/**
 * Smarty Sub Class
 *
 * @author     Foo Bar
 * @version    CVS: $Id$
 */
	  
/** Smartyの読込み */
include_once './class/Smarty/Smarty.class.php';

class MySmarty extends Smarty {
    /**
     *  MySmarty Constructor
     *
     * @param string $dir  テンプレート ディレクトリ
     *
     */
    function MySmarty($dir="") {
        $this->Smarty();
        $this->security        = true;
        $this->caching         = 1;
	$this->cache_dir       = './tmp/cache';
        $this->compile_id      = md5(getcwd());
        $this->compile_dir     = './tmp/template_c';
        $this->left_delimiter  = '{';
        $this->right_delimiter = '}';
	  
        if($dir == "")
            $this->template_dir = "./templates/";
        else
            $this->template_dir = $dir;

	/* その他設定 */
	$this->assign("TITLE","Smarty Tips");
    }
}
	

あとは、MySmartyを生成して使うだけです。コンパイル ディレクトリなどが変更になった場合でも、MySmarty.class.phpを修正するだけでOKです。

<?
require_once './MySmarty.class.php';  // MySmarty classを読込む

$Smarty = new MySmarty();  // Smarty classの生成

// Templateに定義したキーワードへ値に割り付ける 
$Smarty->assign('title', 'Hello Worldの表示');
$Smarty->assign('contents', 'Hello World');

// 指定したテンプレートを展開 
$Smarty->display('hello.tpl');
?>	

多少プログラムもすっきりしました。

Last modified: Thu Feb 21 15:05:10 2008 JST