php支持变量解析,ThinkPHP 模版中动态 include文件 支持变量解析

动态引用 文件 include 支持变量解析

今天实例中用到了需要动态include文件 这样的方法,但thinkPHP不支持动态解析

使用场景: 用户登录后,根据等级调用不同的显示页面,因此需要动态引入文件,而thinkPHP恰恰又不支持动态引入,只好自己想办法了。

那应该怎么去使用呢?

如图所示:

55716f96e89a1.jpg

以上就是数据库对应着文件。

再紧接着就是用户登录成功后,要调用不同的Level 也是不同的menu文件 ,如需要调用menu1.tpl 或 menu2.tpl 等。

但thinkPHP不支持动态引用,怎么办?

我个人的解决方案:

看图:

557170080d1e5.jpg

说了,这里有对应着level 这个level是哪里来的呢? 是在controller中注入的

看图示:

557170403da3c.jpg

5571704990563.jpg

为了给大家看的更明白,我把登录保存在session的数据,帖出来给大家看一下:免的不清楚是怎么回事

557170655ac3d.jpg

需要修改 \ThinkPHP\Library\Think\Template.class.php 对应着parseInclude() 方法:具体修改如图所示:

55717075f01b1.jpg

557170875fb54.jpg

编辑:\ThinkPHP\Library\Think\Template.class.php 代码如下:protected function parseInclude($content, $extend = true){

// 解析继承

if($extend)

$content = $this->parseExtend($content);

// 解析布局

$content = $this->parseLayout($content);

$begin = $this->config['taglib_begin'];

$end = $this->config['taglib_end'];

// 读取模板中的include标签

$find = preg_match_all('/'.$begin.'include\s(.+?)\s*?\/'.$end.'/is',$content,$matches);

if($find) {

for($i=0;$i

$include = $matches[1][$i];

$array = $this->parseXmlAttrs($include);

$file = $array['file'];

//$view=Think::instance('Think\View');

/*

* 解析说明

* 由于thinkPHP不能动态include文件

* 因此这里需要做一些调整

* 看看是否存在 append

* **/

if(isset($array['append'])){

if(isset($array[isvar]) && $array[isvar]=="true"){

$append=$this->get($array['append']);

unset($array['isVar']);

}else{

$append=$array['append'];

}

$file=$file.$append;

unset($array['append']);

}

if(isset($array['replace'])){

if(isset($array[isVar]) && $array[isVar]=="true"){

$file=$this->get($array['replace']);

unset($array['isVar']);

}else{

$file=$array['replace'];

}

unset($array['replace']);

}

unset($array['file']);

$content = str_replace($matches[0][$i],$this->parseIncludeItem($file,$array,$extend),$content);

}

}

return $content;

}需要的朋友拿走!!!!!!!!!!!

另一种实现方式:http://www.thinkphp.cn/code/1261.html

AD:真正免费,域名+虚机+企业邮箱=0元

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值