ThinkPHP实现动态包含文件的方法


Posted in PHP onNovember 29, 2014

本文实例讲述了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框架程序设计有所帮助。

PHP 相关文章推荐
php array_map array_multisort 高效处理多维数组排序
Jun 11 PHP
PHP中数组合并的两种方法及区别介绍
Sep 14 PHP
PHPMailer邮件发送的实现代码
May 04 PHP
通过PHP current函数获取未知字符键名数组第一个元素的值
Jun 24 PHP
php ci框架中加载css和js文件失败的解决方法
Mar 03 PHP
Win2003+apache+PHP+SqlServer2008 配置生产环境
Jul 29 PHP
网站防止被刷票的一些思路与方法
Jan 08 PHP
php随机生成数字字母组合的方法
Mar 18 PHP
PHP实现登录注册之BootStrap表单功能
Sep 03 PHP
PHP实现的最大正向匹配算法示例
Dec 19 PHP
Laravel 框架返回状态拦截代码
Oct 18 PHP
PHP http请求超时问题解决方案
Nov 13 PHP
PHP静态文件生成类实例
Nov 29 #PHP
ThinkPHP实现非标准名称数据表快速创建模型的方法
Nov 29 #PHP
PHP实现的简单日历类
Nov 29 #PHP
PHP实现货币换算的方法
Nov 29 #PHP
php实现的树形结构数据存取类实例
Nov 29 #PHP
Codeigniter购物车类不能添加中文的解决方法
Nov 29 #PHP
ThinkPHP模版中导入CSS和JS文件的方法
Nov 29 #PHP
You might like
PHP生成网页快照 不用COM不用扩展.
2010/02/11 PHP
apache和php之间协同工作的配置经验分享
2013/04/08 PHP
php读取本地文件常用函数(fopen与file_get_contents)
2013/09/09 PHP
PHP利用header跳转失效的解决方法
2014/10/24 PHP
php时间函数用法分析
2016/05/28 PHP
PHP实现下载远程图片保存到本地的方法
2017/06/19 PHP
解决JS浮点数运算出现Bug的方法
2013/03/12 Javascript
浅析四种常见的Javascript声明循环变量的书写方式
2015/10/14 Javascript
基于javascript实现窗口抖动效果
2016/01/03 Javascript
使用jquery.qrcode.min.js实现中文转化二维码
2016/03/11 Javascript
在JavaScript中模拟类(class)及类的继承关系
2016/05/20 Javascript
Angularjs的ng-repeat中去除重复数据的方法
2016/08/05 Javascript
Vue数据驱动模拟实现4
2017/01/12 Javascript
Three.js获取鼠标点击的三维坐标示例代码
2017/03/24 Javascript
node.js中fs.stat与fs.fstat的区别详解
2017/06/01 Javascript
Angular.js ng-file-upload结合springMVC的使用教程
2017/07/10 Javascript
jQuery实现右侧抽屉式在线客服功能
2017/12/25 jQuery
对vue中v-on绑定自定事件的实例讲解
2018/09/06 Javascript
Vue使用Proxy监听所有接口状态的方法实现
2019/06/07 Javascript
VUE DEMO之模拟登录个人中心页面之间数据传值实例
2019/10/31 Javascript
element-ui table组件如何使用render属性的实现
2019/11/04 Javascript
[38:41]2014 DOTA2国际邀请赛中国区预选赛 LGD VS CNB
2014/05/22 DOTA
Python随机生成均匀分布在单位圆内的点代码示例
2017/11/13 Python
Python类的继承和多态代码详解
2017/12/27 Python
详解Python中打乱列表顺序random.shuffle()的使用方法
2019/11/11 Python
python二元表达式用法
2019/12/04 Python
pytorch方法测试——激活函数(ReLU)详解
2020/01/15 Python
python3检查字典传入函数键是否齐全的实例
2020/06/05 Python
解决TensorFlow程序无限制占用GPU的方法
2020/06/30 Python
Django正则URL匹配实现流程解析
2020/11/13 Python
高三英语教学反思
2014/01/13 职场文书
商场消防演习方案
2014/02/12 职场文书
雷人标语集锦
2014/06/19 职场文书
群众路线对照检查材料
2014/09/22 职场文书
党的群众路线教育实践活动对照检查材料(个人)
2014/09/24 职场文书
2019年干货:自我鉴定
2019/03/25 职场文书