thinkPHP5框架中widget的功能与用法详解


Posted in PHP onJune 11, 2018

本文实例讲述了thinkPHP5框架中widget的功能与用法。分享给大家供大家参考,具体如下:

注意:使用助手函数return view()渲染,则挂件功能会失败,必须使用return $this->fetch()

我们在使用模板的时候,一般网站的顶部(比如说导航栏,或者用户登录区域等等),以及网站的尾部footer(比如友情链接或者版权说明等等),和body区域,我们会为了简化代码,都会将这三个部分剖开分离,然后通过模板继承的方式来使用.

但是如果顶部和尾部只是单纯的html代码还好说,但是里面通常有变量赋值和循环遍历以及判断等逻辑.

当然原始的方法就是我们在这两个区域里面使用原生的php代码来实现,但是这并不符合thinkphp5框架的理念,所以就早期的版本中就有widget这个东东,熟悉wordpress和yii框架的都非常熟悉,这个都是建成挂件,小部件的东西.

他可以非常方便的让你在网站某一区域设置包含变量循环等输出,比如广告模块,日历模块,等等.

下面就介绍如何在thinkphp5中简单的使用这项功能.

首先我们需要在模块目录下,简历widget目录,然后在里面建立Blog控制器,然后在index的方法中写下如下代码:

注意,代码中的Book为我自定义的模型,只是配合举例来用.

当然你可以继承Controller,也可以选择不继承,这取决于你使用框架的习惯,当然如果不继承,你需要使用view助手渲染模板.

代码的意思就是将模型Book中的数据取出,并赋值到模板中.

重点:$this->fetch();不要以为里面不写模板路径就会默认只想view视图下blog文件夹中的index视图,

在widget这里是不行的,必须填写对应视图路径

对应的视图路径为view视图下的blog目录下index.html,当然i你可以自定义视图名称

namespace app\index\widget;
use app\index\model\Book;
use think\Controller;
class Blog extends Controller
{
  public function index()
  {
    $list = Book::all();
    $this->assign('list',$list);
    return $this->fetch('widget/index');
  }
}

然后在view/blog/index.html中代码如下,仅作示例来用

在这里自定义输出遍历了指定内容

{volist name="list" id="v"}
<p>{$v.id}+{$v.bookname}</p>
{/volist}

你可以在实际应用中使用任何想需要的功能,比如说导航栏遍历输出,或者许多许多挂件模块

如何调用呢,你可以在你的指定视图模板中或者在继承的公共模板中使用以下

{:widget('Blog/index')} 这种方式来输出,Blog为widget目录下的控制器,index为控制器中的方法名

<!doctype html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport"
     content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
  <title>Document</title>
</head>
<body>
  <p>这里显示的默认主页输出内容</p>
  <p>如果widget使用正常,下面将输出遍历一个数据表的内容</p>
  {:widget('Blog/index')}
</body>
</html>

至此,完成输出以下页面!

这里显示的默认主页输出内容

如果widget使用正常,下面将输出遍历一个数据表的内容

1+weilai

2+yanyan

希望本文所述对大家基于ThinkPHP框架的PHP程序设计有所帮助。

PHP 相关文章推荐
php 文件上传类代码
Aug 06 PHP
PHP中array_merge和array相加的区别分析
Jun 17 PHP
改写ThinkPHP的U方法使其路由下分页正常
Jul 02 PHP
php基于mcrypt的加密解密实例
Oct 27 PHP
php中执行系统命令的方法
Mar 21 PHP
Symfony2框架创建项目与模板设置实例详解
Mar 17 PHP
Laravel与CI框架中截取字符串函数
May 08 PHP
详解WordPress中添加友情链接的方法
May 21 PHP
php与python实现的线程池多线程爬虫功能示例
Oct 12 PHP
PHP实现的堆排序算法详解
Aug 17 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
Dec 31 PHP
浅谈如何提高PHP代码质量之单元测试
May 28 PHP
thinkPHP5框架自定义验证器实现方法分析
Jun 11 #PHP
PHP绕过open_basedir限制操作文件的方法
Jun 10 #PHP
PHPMailer ThinkPHP实现自动发送邮件功能
Jun 10 #PHP
PHP实现从PostgreSQL数据库检索数据分页显示及根据条件查找数据示例
Jun 09 #PHP
PHP实现二维数组中的查找算法小结
Jun 09 #PHP
PHP实现链表的定义与反转功能示例
Jun 09 #PHP
thinkPHP框架实现的无限回复评论功能示例
Jun 09 #PHP
You might like
解析php开发中的中文编码问题
2013/08/08 PHP
php上传图片存入数据库示例分享
2014/03/11 PHP
ExtJS GridPanel 根据条件改变字体颜色
2010/03/08 Javascript
TBCompressor js代码压缩
2011/01/05 Javascript
javascript date格式化示例
2013/09/25 Javascript
基于jQuery实现仿百度首页换肤背景图片切换代码
2015/08/25 Javascript
jquery通过扩展select控件实现支持enter或focus选择的方法
2015/11/19 Javascript
javascript创建含数字字母的随机字符串方法总结
2016/08/01 Javascript
jQuery基本选择器之标签名选择器
2016/09/03 Javascript
nodejs使用express创建一个简单web应用
2017/03/31 NodeJs
详解Angular 中 ngOnInit 和 constructor 使用场景
2017/06/22 Javascript
angular动态删除ng-repaeat添加的dom节点的方法
2017/07/20 Javascript
jQuery 实现倒计时天,时,分,秒功能
2018/07/31 jQuery
用jQuery将JavaScript对象转换为querystring查询字符串的方法
2018/11/12 jQuery
基于JavaScript或jQuery实现网站夜间/高亮模式
2020/05/30 jQuery
vue中el-input绑定键盘按键(按键修饰符)
2020/07/22 Javascript
python使用urllib2提交http post请求的方法
2015/05/26 Python
Using Django with GAE Python 后台抓取多个网站的页面全文
2016/02/17 Python
Python用threading实现多线程详解
2017/02/03 Python
python实战之实现excel读取、统计、写入的示例讲解
2018/05/02 Python
在Pycharm中使用GitHub的方法步骤
2019/06/13 Python
python向图片里添加文字
2019/11/26 Python
python与mysql数据库交互的实现
2020/01/06 Python
python自定义函数def的应用详解
2020/06/03 Python
HTML5应用之文件上传
2016/12/30 HTML / CSS
Get The Label中文官网:英国运动时尚购物平台
2017/04/19 全球购物
英国经济型酒店品牌:Travelodge
2019/12/17 全球购物
如何在Oracle中查看各个表、表空间占用空间的大小
2015/10/31 面试题
护理专业应届毕业生推荐信
2013/11/15 职场文书
房屋改造计划书
2014/01/10 职场文书
违纪检讨书2000字
2014/02/08 职场文书
人事专员的职责
2014/02/26 职场文书
六查六看个人剖析材料
2014/10/14 职场文书
授权委托书
2015/01/28 职场文书
欢迎新生标语2015
2015/07/16 职场文书
SQL实现LeetCode(178.分数排行)
2021/08/04 MySQL