<?php
/**
* Smarty拡張カスタマイズ(基底ビュー)クラス
*
* オーバーライドし処理をカスタマイズ
*/
class custom_smarty extends Smarty {
/**
* コンストラクタ
*
*/
public function __construct() {
$app_base_dir = config::get_instance()->search('app_base_dir');
// Smartyのインスタンスを作成
$this->smarty = new Smarty();
// テンプレートの存在するディレクトリを指定
$this->smarty->template_dir = $app_base_dir . 'templates';
// テンプレートのコンパイル格納先を指定
$this->smarty->compile_dir = $app_base_dir . 'templates_c';
// テンプレートの設定ファイル格納先を指定
//$smarty->config_dir = SMARTY_CONFIG_DIR;
// テンプレートのキャッシュ格納先を指定
//$smarty->cache_dir = SMARTY_CACHE_DIR;
// Smartyのキャッシュ機能を有効にする
//$smarty->caching = true;
}
/**
* テンプレート内の変数に値を割り当てる(HTMLエスケープ有)
*
*/
public function assign($tpl_var, $value = null) {
$pg_character_set = config::get_instance()->search('pg_character_set');
// 優先度低:parent::assign的な書き方の方が良い?
$this->smarty->assign($this->html_escape($tpl_var, $pg_character_set), $this->html_escape($value, $pg_character_set));
}
/**
* テンプレート内の変数に値を割り当てる(HTMLエスケープ無しなので、取扱いは慎重に!)
*
*/
protected function assign_no_escape($tpl_var, $value = null) {
// 優先度低:parent::assign的な書き方の方が良い?
$this->smarty->assign($tpl_var, $value);
}
/**
* Smartyインスタンス設定
*
*/
protected function set_smarty($smarty) {
$this->smarty = $smarty;
}
/**
* Smartyインスタンス取得
*
*/
protected function get_smarty() {
return $this->smarty;
}
/**
* HTML出力用のエスケープ処理
*
*/
private function html_escape($str, $pg_character_set) {
if(is_array($str)){
// 配列の時
$arr = array();
foreach($str as $key => $val) {
// 再帰呼び出しで値をエスケープしてからキーにセット
$arr[$key] = $this->html_escape($val, $pg_character_set);
}
return $arr;
} else {
// 配列以外の時
if(is_null($str)) {
// null
return null;
} else if(is_bool($str)) {
// 論理型
return $str;
} else {
// 上記以外の時のみエスケープ
return htmlentities($str, ENT_QUOTES, $pg_character_set);
}
}
}
/**
* Smartyインスタンス
*
*/
private $smarty = null;
}
?>
Author:kitoku
「奇特」を目指しているITエンジニアです。ホームページ:http://www.kitoku-magic.net/