奇特なブログ

「殊勝に値する行いや心掛け」を意味する、奇特な人になる為のブログです

自作フレームワーク:custom_smarty.php

注意:
本プログラムは、
いわゆる徳丸本に書かれているセキュリティ対策の多くは反映してます。
しかし、高難易度の攻撃に耐えられる程の対策は出来ていないと思います。
本プログラムの流用は自由ですが、流用によって生じた損害については、
自己責任でお願いしてますので、その旨ご了承下さい。

自作フレームワークのトップページに戻る

現在、本クラスは使用されていません。



<?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;
}

?>