php tpl模板引擎定义与使用示例
本文实例讲述了phptpl模板引擎定义与使用。分享给大家供大家参考,具体如下:
tpl.php
check_dir($view_dir)){
$this->view_dir=$view_dir;
}
}
//如果缓存文件不为空,则设置,为空时为默认值
if(!empty($cache_dir)){
if($this->check_dir($cache_dir)){
$this->cache_dir=$cache_dir;
}
}
//如果过期时间不为空,则设置,为空时为默认值
if(!empty($lifetime)){
$this->lifetime=$lifetime;
}
}
/**
*对外公开的方法
*@paramstring$name
*@paramstring$value
*/
publicfunctionassign($name,$value)
{
$this->vars[$name]=$value;//将传入的参数以键值对存入数组中
}
/**
*测试文件
*@param$dir_path
*@returnbool
*/
protectedfunctioncheck_dir($dir_path)
{
//如果文件不存在或不是文件夹,则创建
if(!file_exists($dir_path)||!is_dir($dir_path)){
returnmkdir($dir_path,0777,true);
}
//如果文件不可读或不可写,则设置模式
if(!is_writable($dir_path)||!is_readable($dir_path)){
returnchmod($dir_path,0777);
}
returntrue;
}
/**
*展示方法
*@param$view_name
*@parambool$isInclude
*@paramnull$uri
*/
publicfunctiondisplay($view_name,$isInclude=true,$uri=null)
{
//通过传入的文件名,得到模板文件路径
$view_path=rtrim($this->view_dir,'/').'/'.$view_name;
//判断路径是否存在
if(!file_exists($view_path)){
die('文件不存在');
}
//通过传入的文件名得到缓存文件名
$cache_name=md5($view_name.$uri).'.php';
//缓过缓存文件名得到缓存路径
$cache_path=rtrim($this->cache_dir,'/').'/'.$cache_name;
//判断缓存文件是否存在,如果不存在,重新生成
if(!file_exists($cache_path)){
$php=$this->compile($view_path);//解析模板文件
file_put_contents($cache_path,$php);//缓存文件重新生成
}else{
//如果缓存文件存在,判断是否过期,判断模板文件是否被修改
$is_time_out=(filectime($cache_path)+$this->lifetime)>time()?false:true;
$is_change=filemtime($view_path)>filemtime($cache_path)?true:false;
//如果缓存文件过期或模板文件被修改,重新生成缓存文件
if($is_time_out||$is_change){
$php=$this->compile($view_path);
file_put_contents($cache_path,$php);
}
}
if($isInclude){
extract($this->vars);//解析传入变量的数组
include$cache_path;//展示缓存
}
}
/**
*正则解析模板文件
*@paramstring$file_name
*@returnmixed|string
*/
protectedfunctioncompile($file_name)
{
$html=file_get_contents($file_name);//获取模板文件
//正则转换数组
$array=[
'{$%%}'=>'=$\1?>',
'{foreach%%}'=>'',
'{/foreach}'=>'',
'{include%%}'=>'',
'{if%%}'=>'',
'{/if}'=>'',
'{for%%}'=>'',
'{/for}'=>'',
'{switch%%}'=>'',
'{/switch}'=>''
];
//遍历数组,生成正则表达式
foreach($arrayAS$key=>$value){
//正则表达式,
$pattern='#'.str_replace('%%','(.+?)',preg_quote($key,'#')).'#';
if(strstr($pattern,'include')){
$html=preg_replace_callback($pattern,[$this,'parseInclude'],$html);
}else{
$html=preg_replace($pattern,$value,$html);
}
}
return$html;
}
/**
*处理include表达式
*@paramarray$data
*@returnstring
*/
protectedfunctionparseInclude($data)
{
$file_name=trim($data[1],'\'"');
$this->display($file_name,false);
$cache_name=md5($file_name).'.php';
$cache_path=rtrim($this->cache_dir,'/').'/'.$cache_name;
return'';
}
}
user_tpl,,,,从数据库中取值,作为参数传到模板文件,再解析模板文件
table('blog_menu')->field($dat)->order('idASC')->select();
$tpl->assign('menu',$res);
$tpl->display('index.html');
更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP模板技术总结》、《PHP基于pdo操作数据库技巧总结》、《PHP运算与运算符用法总结》、《PHP网络编程技巧总结》、《PHP基本语法入门教程》、《php面向对象程序设计入门教程》、《php字符串(string)用法总结》、《php+mysql数据库操作入门教程》及《php常见数据库操作技巧汇总》
希望本文所述对大家PHP程序设计有所帮助。
声明:本文内容来源于网络,版权归原作者所有,内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:czq8825#qq.com(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。