发表时间:2015-05-27来源:网络
有了一个数据操作类,这样项目只能简单地操作数据,但是要达到能够和美工一起显示美好的页面,则需要一个比较好的模板引擎。与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;
}
/*
*替换分隔符,以及替换解析器的内容
*@param $content string 读取的内容
*@return $token_content string 替换后的内容
*/
public function token($content){
$token_content = $content;
if($left_delimiter != '<{'){
$token_content = str_replace($left_delimiter , '<{' , $token_content);
$token_content = str_replace($right_delimiter, '}>' , $token_content);
}
$token_content = preg_replace(array_keys($this->preg_temp), $this->preg_temp , $token_content);
return $token_content;
}
/*
*生成储存
*@param $content string 读取的内容
*
public function store_buff($content){
$this->cache_file = md5($this->template_file) . $this->template_file . '.html';
$tempfile = $this->cache_dir . $this->cache_file;
$fp = fopen($tempfile , 'w');
fputs($fp,$content);
fclose($fp);
unset($fp);
}
*/
/*
*编译储存
*@param $content string 读取的内容
*
*/
public function complie($content){
$this->template_c_file = md5($this->template_file) . $this->template_file . '.php';
$tempfile = $this->template_c_dir . $this->template_c_file;
$fp = fopen($tempfile , 'w');
fputs($fp,$content);
fclose($fp);
unset($fp);
}
/*
*读取文件的内容
*@param $file string 文件名
*@return $content string 文件内容
*/
public function readfile($file){
if(file_exists($file)){
$fp = fopen($file , 'r');
$content ='';
while(!feof($fp)){
$content .= fgets($fp,4096);
}
fclose($fp);
unset($fp);
return $content;
}
else{
exit($file . ' not exist!');
}
}
/*
*模板嵌套
*@param $file string 文件名
*@return string 文件的绝对地址
*/
public function _include($file){
if(file_exists($this->template_dir . $file)){
return ($this->template_dir . $file);
}
else{
echo "模板文件不存在";
exit;
}
} www.zhishiwu.com
}
?>
有了这个模板,你可以忘记那些大型的模板,毕竟你的美工不会在他的切片文件里写那么多SMARTY的标记,而只要他切好,你可以直接用,不用去修改images , css ,js 地址了。
上一篇:PHP实现爱查快递接口
CI框架连接数据库配置操作以及多数据库操作
asp 简单读取数据表并列出来 ASP如何快速从数据库读取大量数据
C语言关键字及其解释介绍 C语言32个关键字详解
C语言中sizeof是什么意思 c语言里sizeof怎样用法详解
将视频设置为Android手机开机动画的教程
最简单的asp登陆界面代码 asp登陆界面源代码详细介绍
PHP中的魔术方法 :__construct, __destruct , __call, __callStatic,__get, __set, __isset, __unset , __sleep,
PHP中include和require区别之我见
PHP中的(++i)前缀自增 和 (i++)后缀自增
php递归返回值的问题
新浪微博app官方版下载v14.10.3 安卓最新版本
205.9M |社交娱乐
乐刻运动健身平台官方版下载v6.10.0 安卓最新版
107.4M |生活服务
智通人才网招聘网东莞官方版下载v10.31.1 安卓最新版本
173.0M |生活服务
睿住社区app下载v3.2.0 安卓版
187.9M |生活服务
fnkvision监控app下载v1.0.3 安卓版
131.6M |生活服务
接力学习app小学版下载v5.0.7.3 安卓官方版
120.3M |学习教育
鱼络圈官方版下载v1.2.7 安卓版
100.2M |影音播放
公务员考试对题库app下载v3.1.9 安卓最新版
114.0M |学习教育
2014-09-05
2014-09-05
2022-03-21
2022-03-17
2014-09-05
2022-03-22
2014-09-05
2014-09-05
2015-07-05
2022-03-17
uno一起优诺官方版下载v1.13.4908 安卓最新版
卡牌对战宝宝巴士快乐启蒙小游戏下载v8.7.22 安卓最新版本
其它手游宝宝超市春节版游戏最新版下载v9.82.51.00 安卓官方版
经营养成网易游戏蛋仔派对官服版下载v1.0.165 安卓正版
休闲益智欢乐斗地主官方正版下载v8.031.016 安卓完整版
其它手游光遇官服下载v0.13.0 安卓正版
休闲益智小伴龙儿童启蒙官方版下载v10.2.1 安卓原版
其它手游2024逆水寒测试版下载v2.2.10863892 安卓版
角色扮演剑侠世界起源手游官方版下载v1.17.3 安卓版
角色扮演