一个简单的模板类(PHP)
有了一个数据操作类,这样项目只能简单地操作数据,但是要达到能够和美工一起显示美好的页面,则需要一个比较好的模板引擎。与SMARTY这样比较庞大的模板引擎相比,我想下面这个则真算得小得多了。
这个模板类是我以前在网上看到的,写得比较好,所以我就引用了,还不知道作者是谁,这里就先讲一下这个类的原理。
首先,这个类只有一个简单的正则解析器。但是基本上可以用到了。如果再能够在此基础上扩展,我相相信这个小东西很有发展,请有相同爱好的同志们,来加入到强化他的目地。我这就抛下砖。
template.class.php
[html]
<?php
class template{
//变量储存的数组
private $vars = array();
//模板目录
public $template_dir = './template/';
//缓存目录
public $cache_dir = './cache/';
//编译目录
public $template_c_dir = './template_c/';
//模板文件
public $template_file = '';
//左连接符
public $left_delimiter = '<{';
//右连接符
public $right_delimiter = '}>';
//编译文件
private $template_c_file = '';
//缓存文件
private $cache_file = '';
//缓存时间
public $cache_time = 0;
//内置解析器
private $preg_temp = array(
'~<\{(\$[a-z0-9_]+)\}>~i'
=> '<?php echo $1; ?>', // <{$name}>
'~<\{(\$[a-z0-9_]+)\.([a-z0-9_]+)\}>~i'
=> '<?php echo $1[\'$2\']; ?>', // <{$arr.key}>
'~<\{(\$[a-z0-9_]+)\.([a-z0-9_]+)\.([a-z0-9_]+)\}>~i'
=> '<?php echo $1[\'$2\'][\'$3\']; ?>', // <{$arr.key.key2}>
'~<\?php\s+(include_once|require_once|include|require)\s*\(\s*(.+?)\s*\)\s*;?\s*\?>~i'
=> '<?php include \$this->_include($2); ?>', // <?php include('inc/top.php'); ?>
'~<\{:(.+?)\}>~' => '<?php echo $1; ?>', // <{:strip_tags($a)}>
'~<\{\~(.+?)\}>~' => '<?php $1; ?>', // <{~var_dump($a)}>
'~<\?=\s*~' => '<?php echo ', // <?=
);
/**
*构造器
*/
public function __construct(){
if(defined('TMP_PATH')){
$this->template_c_dir = TMP_PATH . 'template_c/';
$this->cache_dir = TMP_PATH . 'cache/';
}
}
/**
*变量赋值
*@param $key mixed 键名
*@param $value mixed 值
*/
public function assign($key , $value = ''){
if(is_array($key)){
$this->vars=array_merge($key,$this->vars);
}
else{
$this->vars[$key]=$value;
}
}
/**
*显示页面
*@param $file string 模板文件名
*/
public function display($file){
echo $this->fetch($file);
}
/**
*返回缓存区内容
*@param $file string 模板文件名
*@return $content string 缓存内容
*/
public function fetch($file){
$this->template_file = $file;
$desc_template_file = $this->template_dir .$file;
$desc_content = $this->readfile($desc_template_file);
$template_c_file_time= filemtime($desc_template_file);
//若在超过缓存时间,则编译
if($this->cache_time < time()-$template_c_file_time){
$this->complie($this->token($desc_content));
}
//以下获取缓存区的内容
ob_start();
@extract($this->vars , EXTR_OVERWRITE);
include ($this->template_c_dir . $this->template_c_file);
$content = ob_get_contents();
ob_end_clean();
//$this->store_buff($content);
return $content;
}
&nbs
补充:Web开发 , php ,