thinkphp动态包含文件用法例子

发布时间:2020-09-29编辑:脚本学堂
有关thinkphp动态包含文件的操作方法,thinkphp提供了包含文件的方法,使用widget实现动态菜单包含功能,需要的朋友参考下。

thinkphp动态包含文件的方法

问题描述:
在项目中一般主页包含头部和脚步,为了方便管理,这些都需要使用包含文件来实现,ThinkPHP提供了包含文件的方法。
不过在运行的过程中,请求时只是请求的是模板文件,即所谓的静态包含,如果遇到菜单是动态生成,就是再寻他法了。

解决办法:使用Widget

1、在页面中实现一个分类显示的Widget,首先定义一个Widget控制器层 CateWidget。

例如:
 

复制代码 代码示例:
class CateWidget extends Action { 
    public function menu(){ 
        return 'menuWidget'; 
    } 
}

注意,是在Widget包中定义,和一般的Action有区别。

2、然后,在模版中通过R方法调用这个Widget(扩展Widget方式在模版中使用的是W方法)。

R函数参考:http://www.thinkphp.cn/info/134.html
 

{:R('Cate/Menu','','Widget')}

输出结果:
menuWidget

3、如CateWidget类的menu方法改成:
 

复制代码 代码示例:
class CateWidget extends Action { 
    public function menu(){ 
        echo 'menuWidget'; 
    } 
}

4、模版中的用法修改为:
 

复制代码 代码示例:
{~R('Cate/Menu','','Widget')}

5、若要在调用Widget时使用参数,则定义:
 

复制代码 代码示例:
class CateWidget extends Action { 
    public function menu($id,$name){ 
        echo $id.':'.$name; 
    } 
}

6、模版中参数调用,使用:
 

复制代码 代码示例:
{:R('Cate/Menu',array(5,'thinkphp'),'Widget')}
 

则会输出 5:thinkphp

7、复杂点的例子
 

复制代码 代码示例:
class CateWidget extends Action { 
    public function menu(){ 
        $menu = M('Cate')->getField('id,title'); 
        $this->assign('menu',$menu); 
        $this->display('Cate:menu'); 
    } 
}

8、CateWiget类渲染了一个模版文件Tpl/Cate/menu.html,调用模版的灵活也是使用这种方式实现Widget的区别(Widget扩展方式中需要调用renderFile方法渲染模版)。
在menu.html模版文件中的用法:{$key}:{$title}。

有关thinkphp动态包含文件用法的例子,就介绍这些了,希望对大家有所帮助。