smarty include_php,PHP smarty模板引擎中的include实现方式?

Smarty的Include解析我没有看过,这里我贴一个我写的PHP框架的模板引擎里对include的实现吧。

主要也是递归解析,先将解析到的include file="index.tpl"语法,并逐层对其进行解析,最后把解析到的内容插入到include的模板当中。逐层回调后就得到了index.tpl里所有include的内容,不说了,贴上代码吧!

/**

* 解析模板中包含其它模板文件语法 include_tpl

* @param string $content 模板文件内容

* @return void

*/

private function _parseIncludeTpl($content = ''){

if( preg_match_all( $this->_regx_include_tpl, $content, $matchs ) ){

foreach( $matchs[2] as $k => $v){

preg_match_all('/\`\$([\w]*)\`/', $v, $vars);

if($vars){

foreach($vars[1] as $y => $var){

$replace = $this->_tpl_vars[$var];

$v = str_replace( $vars[$y][0], $replace, $v );

}

}

$tplFilePath = str_replace( array("\\", '/'), array(DS, DS), $v );

if( substr($tplFilePath, 0, 1) == DS ){

//采用绝对路径引入模板文件

$tplFilePath = APP_PATH . DS . $this->templateDir . $tplFilePath;

}else{

//采用相对路径引入模板文件

$tplFilePath = dirname($this->templeteFile). DS . $tplFilePath;

}

if( !file_exists($tplFilePath)){

$this->_error('The template file ' . $tplFilePath . ' is not exists!');

}

$includeFileContent = file_get_contents($tplFilePath);

$includeFileContent = $this->_parseIncludeTpl($includeFileContent); //递归include_tpl

$content = str_replace( $matchs[0][$k], $includeFileContent, $content );

}

return $content;

}else{

return $content;

}

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在讲解tmd_tpl的使用方法之前,我要先讲讲为什么要重新发明这个轮子。 那我们要从这世界上所谓的PHP模板引擎都为大家做了哪些贡献说起。 在PHP界谈模板引擎,必不可免的要拿Smarty开刀, 这个无比傻帽的却又带有一点点官方色彩的模板引擎, 如果没有我这样人富有正义感又富有创新精神的热血青年站出来, 不知道它还要继续毒害多少那些处于花季而又对PHP充满美丽幻想的少年。   1.语法 你真的认为美工学的了{foreach key=key item=item from=$contact} 这样的语法 却学不了 $item) { ?> 吗? 而 {if $name eq "Fred" or $name eq "Wilma"} 又比 优秀到哪里去? 首先我对美工会学Smarty语法始终保持怀疑态度,至少我工作这么多年还没遇到过一个会Smarty语法的, 而就算美工愿意学,你又为何不教他正宗的PHP语法,却要教他一门连你自己搞不清楚的“Smarty语言”   2.可视化 当页面从美工交接到你手上,然后你给那些完美的网页,套上那恶心的Smarty代码, 然后在Dreamweaver里,你是否认真的看过那些页面已经变得何等的丑陋, 图片还看得见吗?CSS还在吗?更不用说include了。而要修改的时候呢?你还能一眼认出来吗? 这些都解决不了,那些所谓的模板引擎又怎么配得上“强大”二字?   3\多的我就不说了,这里只是拿Smarty举个例子,应该不难发现,其它模板引擎也大同小异, 都忙着发明自己的模板语言,而真正需要解决的问题则避而不谈, 现在你是否明白了,所谓的模板引擎,所谓的强大,都TMD骗子, 在夜深人静的夜里,我曾无数次的醒来,感觉自己的担子又重了一些,只因为不能够将这个残忍的事实告诉你。 于是我痛心疾首,痛下狠心,百忙之抽空写了这个命名为tmd_tpl的真正的模板引擎, 虽然也许现在还不算强大,但强大是未来的一种必然。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值