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 相关文章推荐
一个SQL管理员的web接口
Oct 09 PHP
php一些公用函数的集合
Mar 27 PHP
PHP Mysql编程之高级技巧
Aug 27 PHP
php 将字符串按大写字母分隔成字符串数组
Apr 30 PHP
PHP中使用cURL实现Get和Post请求的方法
Mar 13 PHP
采用memcache在web集群中实现session的同步会话
Jul 05 PHP
php json_encode()函数返回json数据实例代码
Oct 10 PHP
PHP实现搜索地理位置及计算两点地理位置间距离的实例
Jan 08 PHP
thinkphp框架实现数据添加和显示功能
Jun 29 PHP
Yii2选项卡的简单使用
May 26 PHP
Bootstrap+PHP实现多图上传功能实例详解
Apr 08 PHP
php7中停止php-fpm服务的方法详解
May 09 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 抓取网页图片并且另存为的实现代码
2010/03/24 PHP
PHP+Mysql+jQuery查询和列表框选择操作实例讲解
2015/10/22 PHP
PHP程序中的文件锁、互斥锁、读写锁使用技巧解析
2016/03/21 PHP
php正则修正符用法实例详解
2016/12/29 PHP
老生常谈PHP 文件写入和读取(必看篇)
2017/05/22 PHP
基于PHP实现的多元线性回归模拟曲线算法
2018/01/30 PHP
小型js框架veryide.librar源代码
2009/03/05 Javascript
轻量级 JS ToolTip提示效果
2010/07/20 Javascript
js函数定时器实现定时读取系统实时连接数
2014/04/30 Javascript
基于Bootstrap3表格插件和分页插件实例详解
2016/05/17 Javascript
BootStrap 智能表单实战系列(二)BootStrap支持的类型简介
2016/06/13 Javascript
cocos creator Touch事件应用(触控选择多个子节点的实例)
2017/09/10 Javascript
详解webpack与SPA实践之开发环境搭建
2017/12/18 Javascript
Angular父组件调用子组件的方法
2018/04/02 Javascript
提升node.js中使用redis的性能遇到的问题及解决方法
2018/10/30 Javascript
深入解析Vue源码实例挂载与编译流程实现思路详解
2019/05/05 Javascript
layui表格数据重载
2019/07/27 Javascript
JavaScript定时器使用方法详解
2020/03/26 Javascript
[56:18]VGJ.S vs Secret 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
[01:13:51]TNC vs Serenity 2018国际邀请赛小组赛BO2 第二场 8.18
2018/08/19 DOTA
[34:47]完美世界DOTA2联赛PWL S2 Magma vs LBZS 第一场 11.18
2020/11/18 DOTA
Python操作Mysql实例代码教程在线版(查询手册)
2013/02/18 Python
pycharm 使用心得(九)解决No Python interpreter selected的问题
2014/06/06 Python
CentOS6.5设置Django开发环境
2016/10/13 Python
Django保护敏感信息的方法示例
2019/05/09 Python
python3连接kafka模块pykafka生产者简单封装代码
2019/12/23 Python
英国轻奢珠宝品牌:Astley Clarke
2016/12/18 全球购物
路易威登和香奈儿手袋:LuxeDH
2017/01/12 全球购物
Lenox官网:精美的瓷器&独特的礼品
2017/02/12 全球购物
加拿大租车网站:Enterprise Rent-A-Car
2018/07/26 全球购物
工商管理本科毕业生求职信范文
2013/10/05 职场文书
致铅球运动员加油稿
2014/02/13 职场文书
单位工资证明范本
2015/06/12 职场文书
Python使用openpyxl模块处理Excel文件
2022/06/05 Python
win10截图快捷键win+shift+s没有反应无法截图怎么解决?
2022/08/14 数码科技
element tree树形组件回显数据问题解决
2022/08/14 Javascript