geekli.cn
域名年龄: 11年10个月7天HTTP/1.1 200 OK 访问时间:2014年05月10日 20:08:13 服务器:Apache/2.2.22 (Ubuntu) 语言环境:PHP/5.3.10-1ubuntu3.11 动作:Cookie,Accept-Encoding X-Pingback: http://blog.geekli.cn/xmlrpc.php Content-Encoding: gzip Keep-Alive: timeout=5, max=100 连接:Keep-Alive Transfer-Encoding: chunked 类型:text/html; charset=UTF-8 网站编码:UTF-8
geekliKeep It Simple, Stupid搜索主菜单跳至主内容区域跳至副内容区域首页业余项目常用工具软件文章导航← 早期文章php模版引擎 模版继承{extends}的简单实现发表于2014 年 5 月 9 日由ksc回复套模版的时候最烦的就是重复内容了,虽然ecshop cls_template.php支持{include file=”}, 但是有些时候还是麻烦了点, 所以就打算在此扩展一下 增加模版继承的支持。下面是实现代码这里只是简单实现了{extend}{block}标签 ,支持多重继承。/** 把结果中的 block标签过滤掉,只要里面的内容*/function trim_block($source){return preg_replace('/{block name=[^}]*}(.*){\\/block}/Us', '\1', $source);}function extend_file($source){global $files;$p="/{extends file='(.*)'}/";$count=preg_match_all($p,$source,$out);if($count==0){return $source;}#print_r($out);$filename=$out[1][0];//获取继承的模版路径路径$p_contents=extend_file($files[$filename]);return extend_block($source,$p_contents);}/*** 继承模版内容* @param $s_contents 子模板中的内容* @param $p_contents 父模板中的内容* return string 继承后的模版内容*/function extend_block($s_contents,$p_contents){$pblock=get_block($p_contents);$sblock=get_block($s_contents);foreach($pblock as $key=>$v){if(isset($sblock[$key])){$p_contents=str_replace($v['b'],$sblock[$key]['b'],$p_contents);}}return $p_contents;}/*** 提取模版中的block标签信息 返回一个数组* @param $str 模版内容* return array 返回格式如下(简化了表示一下为json格式):{ "title" :{"val":"默认页面标题","b":"{block name='title'}默认页面标题{/block}"},"head" :{"val":"head 内容","b" : "{block name='head'}head 内容{/block}"}}*/function get_block($str){$pattern ="/{block name=['|\"](\w*)['|\"]}(.*){\\/block}/Us";preg_match_all($pattern ,$str,$matches ,PREG_SET_ORDER);$l=array();foreach($matches as $v){$l[$v[1]]=array('val'=>$v[2],'b'=>$v[0]);}#print_r($l);return $l;}12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758/* * 把结果中的 block标签过滤掉,只要里面的内容 */function trim_block($source){ return preg_replace('/{block name=[^}]*}(.*){\\/block}/Us', '\1', $source);}function extend_file($source){ global $files; $p="/{extends file='(.*)'}/"; $count=preg_match_all($p,$source,$out); if($count==0){ return $source; } #print_r($out); $filename=$out[1][0];//获取继承的模版路径路径 $p_contents=extend_file($files[$filename]); return extend_block($source,$p_contents);}/** * 继承模版内容 * @param $s_contents 子模板中的内容 * @param $p_contents 父模板中的内容 * return string 继承后的模版内容 */function extend_block($s_contents,$p_contents){ $pblock=get_block($p_contents); $sblock=get_block($s_contents); foreach($pblock as $key=>$v){ if(isset($sblock[$key])){ $p_contents=str_replace($v['b'],$sblock[$key]['b'],$p_contents); } } return $p_contents; }/** * 提取模版中的block标签信息 返回一个数组 * @param $str 模版内容 * return array 返回格式如下(简化了表示一下为json格式): { "title" :{"val":"默认页面标题","b":"{block name='title'}默认页面标题{/block}"}, "head" :{"val":"head 内容","b" : "{block name='head'}head 内容{/block}"} } */function get_block($str){ $pattern ="/{block name=['|\"](\w*)['|\"]}(.*){\\/block}/Us"; preg_match_all($pattern ,$str,$matches ,PREG_SET_ORDER); $l=array(); foreach($matches as $v){ $l[$v[1]]=array('val'=>$v[2],'b'=>$v[0]); } #print_r($l); return $l;}下面是测试代码/
© 2010 - 2020 网站综合信息查询 同IP网站查询 相关类似网站查询 网站备案查询网站地图 最新查询 最近更新 优秀网站 热门网站 全部网站 同IP查询 备案查询
2024-11-20 03:39, Process in 0.0081 second.