php模板函数 正则实现代码

高洛峰
发布: 2016-12-01 14:48:55
原创
1317人浏览过

我看过phpcms、discuz的源码,所以可能就缺乏创新了,不过原理大都相通,只是细节处理可能稍微不同。 
说正题,下面开始谈谈具体实现过程了。 
1.首先要想好模板文件放在哪?转换后的php文件放哪?还有怎么命名?直接上源码: 
复制代码 代码如下: 
function template($tpl = 'index',$dir = 'hello') 

if(!file_exists($pd = tpl_path.$dir.'/'))@mkdir($pd,0777) or die("$pd目录创建失败");//如cache/tpl/hello/ 
if(!file_exists($td = tpl.$dir.'/'))@mkdir($td,0777) or die("$td目录创建失败");//如data/tpl/hello/ 

$t2p = $pd.$tpl.'.php';//模板文件正则转换后形成的php文件,如cache/tpl/hello/index.php 
$t2h = $td.$tpl.'.html';//html模板文件,如data/tpl/hello/index.html 

2.什么时候需要正则转换?可以是正则后的php文件不存在,或正则前的html文件发生改变时。这里使用到了filemtime(string $path)函数,其返回文件最近修改时间。 
复制代码 代码如下: 
if(!file_exists($t2p) || @filemtime($t2p) < @filemtime($t2h) )//模板文件改变后,正则的php文件相应更新 

template_go($t2p,$t2h);//模板转换开始 

return $t2p;//返回正则后的php文件,可以这样调用:如include template('header','hello'); 


3.开始模板转换,先从html文件中读出,然后正则替换,最后写入php文件中。 
复制代码 代码如下: 
function template_go($t2p,$t2h) 

$str = @file_get_contents($t2h);//读出 
if($str === false) exit("模板文件缺失,请检查!"); 
$str = template_do($str);//正则替换 
@chmod($t2p,0777); 
return $str = file_put_contents($t2p, $str);//写入 


4.正则规则,几条比较简略的正则替换语法。 
复制代码 代码如下: 
function template_do($str) 

$str = preg_replace('/([\n\r+])\t+/s', '\1', $str);//去掉tab制表符。修正符/s是不忽略换行 
$str = preg_replace('/\{$(.*)\}/us', '<?php echo $\1; ?>', $str);/*{$xx}换成<?php echo $xx;?> 注意,必须加上修正符/u,只能匹配一次。也可懒惰匹配*/ 
$str = preg_replace('/\{php (.+)\}/', '<?php \1 ?>', $str);/*{php xxxx}换成<?php xxxx ?> 注意,不能加上修正符/s,要考虑多次进行该正则而换行的问题*/ 
$str = preg_replace('/\{template(.*)\}/us', '<?php include template\1; ?>', $str); 
/*{template(xx,yy)}换成<?php include template(xx,yy); ?> */ 
$str = preg_replace('/\{include (.*)\}/us', '<?php include "\1"; ?>', $str);/*{include xx.php}换成<?php include xx.php ?> */ 
$str = "<?php defined('in_ph') or die('access denied');?>".$str; 
//$str = preg_replace('/\s+/', ' ', $str);//查看网页源代码看看 
return $str; 


当然,这个函数现在还是比较简陋的,期待能完善它。 
 

国洋商务通
国洋商务通

Gyb2b V1.01免费版可终身使用,是一款功能强大的B2B电子商务应用软件。该软件不仅更新和修改了V1.0相关功能,更是采用了目前互联网上最流行的LAMP组合(Linux+Apache+Mysql+PHP)开发完成,模板技术实现了界面与代码的有效分离,用户可以快速地在此基础上编译模板;提供B2B电子商务应用最常见的求购、供应、商品、公司库、行业资讯、商圈、资信认证、在线交易、交易评分、留言、搜

国洋商务通 0
查看详情 国洋商务通
相关标签:
php
PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号