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基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
PHP5 操作MySQL数据库基础代码
Sep 29 PHP
smarty模板嵌套之include与fetch性能测试
Dec 05 PHP
array_multisort实现PHP多维数组排序示例讲解
Jan 04 PHP
抓取并下载CSS中所有图片文件的php代码
Sep 26 PHP
如何用php生成扭曲及旋转的验证码图片
Jun 07 PHP
PHP Class&Object -- PHP 自排序二叉树的深入解析
Jun 25 PHP
php对数组排序的简单实例
Dec 25 PHP
百度实时推送api接口应用示例
Oct 21 PHP
PHP汉字转换拼音的函数代码
Dec 30 PHP
php 命名空间(namespace)原理与用法实例小结
Nov 13 PHP
PHP标准库 (SPL)――Countable用法示例
Jun 05 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
thinkPHP框架中执行原生SQL语句的方法
2017/10/25 PHP
PHP实现生成模糊图片的方法示例
2017/12/21 PHP
PHP htmlspecialchars_decode()函数用法讲解
2019/03/01 PHP
javascript一些不错的函数脚本代码
2008/09/10 Javascript
JQuery 返回布尔值Is()条件判断方法代码
2012/05/14 Javascript
js导航菜单(自写)简单大方
2013/03/28 Javascript
JS正则表达式获取分组内容的方法详解
2013/11/15 Javascript
js数组方法扩展实现数组统计函数
2014/04/09 Javascript
基于jQuery实现下拉框
2014/11/24 Javascript
jQuery 重复加载错误以及修复方法
2014/12/16 Javascript
谈谈AngularJs中的隐藏和显示
2015/12/09 Javascript
图片上传之FileAPI与NodeJs
2017/01/24 NodeJs
Angular-Ui-Router+ocLazyLoad动态加载脚本示例
2017/03/02 Javascript
JavaScript中的普通函数和箭头函数的区别和用法详解
2017/03/21 Javascript
Vue 2.X的状态管理vuex记录详解
2017/03/23 Javascript
js实现分页功能
2017/05/24 Javascript
ExtJs异步无法向外传值和赋值的完美解决办法
2017/06/14 Javascript
vue-resource调用promise取数据方式详解
2017/07/21 Javascript
[01:19:23]2018DOTA2亚洲邀请赛 4.5 淘汰赛 Mineski vs VG 第二场
2018/04/06 DOTA
[01:35]2018年度CS GO最佳战队-完美盛典
2018/12/17 DOTA
结合Python的SimpleHTTPServer源码来解析socket通信
2016/06/27 Python
详解python中字典的循环遍历的两种方式
2017/02/07 Python
python字符串的方法与操作大全
2018/01/30 Python
修复 Django migration 时遇到的问题解决
2018/06/14 Python
python递归调用中的坑:打印有值, 返回却None
2020/03/16 Python
CSS3实现div从下往上滑入滑出效果示例
2020/04/28 HTML / CSS
基于canvas使用贝塞尔曲线平滑拟合折线段的方法
2018/01/10 HTML / CSS
塔吉特百货公司官网:Target
2017/04/27 全球购物
驻村工作先进事迹
2014/08/14 职场文书
政府班子四风问题整改措施思想汇报
2014/10/08 职场文书
单位员工收入证明样本
2014/10/09 职场文书
先进学校事迹材料
2014/12/30 职场文书
教师考核评语大全
2014/12/31 职场文书
欧也妮葛朗台读书笔记
2015/06/30 职场文书
高二数学教学反思
2016/02/18 职场文书
年终奖金发放管理制度,中小企业适用,拿去救急吧!
2019/07/12 职场文书