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一句话cmdshell新型 (非一句话木马)
Apr 18 PHP
php高级编程-函数-郑阿奇
Jul 04 PHP
新浪微博API开发简介之用户授权(PHP基础篇)
Sep 25 PHP
PHP使用PHPMailer发送邮件的简单使用方法
Nov 12 PHP
php中file_get_content 和curl以及fopen 效率分析
Sep 19 PHP
php-redis中的sort排序函数总结
Jul 08 PHP
php生成过去100年下拉列表的方法
Jul 20 PHP
PHP 等比例缩放图片详解及实例代码
Sep 18 PHP
Mac版PhpStorm之XAMPP整合apache服务器配置的图文教程详解
Oct 13 PHP
PHP实现的随机红包算法示例
Aug 14 PHP
php使用curl伪造来源ip和refer的方法示例
May 08 PHP
laravel5表单唯一验证的实例代码
Sep 30 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接受文件并获得其后缀名的方法
2015/08/05 PHP
php验证邮箱和ip地址最简单方法汇总
2015/10/30 PHP
nginx下安装php7+php5
2016/07/31 PHP
php 判断字符串编码是utf-8 或gb2312实例
2016/11/01 PHP
PHP防止图片盗用(盗链)的方法小结
2016/11/11 PHP
PHP实现的MD5结合RSA签名算法实例
2017/10/07 PHP
prototype 源码中文说明之 prototype.js
2006/09/22 Javascript
jquery利用命名空间移除绑定事件的方法
2015/03/11 Javascript
BootStrap下的弹出框加载select2框架失败的解决方法
2017/08/31 Javascript
js处理包含中文的字符串实例
2017/10/11 Javascript
Node.js使用Koa搭建 基础项目
2018/01/08 Javascript
JS简单获取并修改input文本框内容的方法示例
2018/04/08 Javascript
jquery实现搜索框功能实例详解
2018/07/23 jQuery
在vue中把含有html标签转为html渲染页面的实例
2019/10/28 Javascript
微信小程序实现上传照片代码实例解析
2020/08/04 Javascript
OpenLayers3实现地图显示功能
2020/09/25 Javascript
[02:30]DOTA2英雄基础教程 暗影恶魔
2013/12/17 DOTA
python 快速排序代码
2009/11/23 Python
pymongo实现控制mongodb中数字字段做加法的方法
2015/03/26 Python
Python中的自省(反射)详解
2015/06/02 Python
Python 3实战爬虫之爬取京东图书的图片详解
2017/10/09 Python
浅析python中的迭代与迭代对象
2018/10/08 Python
详解Django-auth-ldap 配置方法
2018/12/10 Python
python如何提取英语pdf内容并翻译
2020/03/03 Python
Jupyter Notebook折叠输出的内容实例
2020/04/22 Python
python爬虫实现爬取同一个网站的多页数据的实例讲解
2021/01/18 Python
css3绘制百度的小度熊
2018/10/29 HTML / CSS
HTML5 实战PHP之Web页面表单设计
2011/10/09 HTML / CSS
加拿大最大的箱包及旅游配件零售商:Bentley Leathers
2017/07/19 全球购物
size?瑞典:英国伦敦的球鞋精品店
2018/03/01 全球购物
中专毕业自我鉴定
2013/10/16 职场文书
贷款委托书范本
2014/04/08 职场文书
群众路线个人整改方案
2014/10/25 职场文书
见义勇为事迹材料
2014/12/24 职场文书
2015年“公民道德宣传日”活动方案
2015/05/06 职场文书
如何做好员工培训计划?
2019/07/09 职场文书