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(发邮件时,请将#更换为@)进行举报,并提供相关证据,一经查实,本站将立刻删除涉嫌侵权内容。