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(2)
Oct 09 PHP
一篇入门的php Class 文章
Apr 04 PHP
php中检查文件或目录是否存在的代码小结
Oct 22 PHP
PHP中isset()和unset()函数的用法小结
Mar 11 PHP
php中有关字符串的4个函数substr、strrchr、strstr、ereg介绍和使用例子
Apr 24 PHP
WebQQ最新登陆协议的用法
Dec 22 PHP
Symfony页面的基本创建实例详解
Jan 26 PHP
CodeIgniter框架验证码类库文件与用法示例
Mar 18 PHP
Laravel框架实现redis集群的方法分析
Sep 14 PHP
Yii2.0框架实现带分页的多条件搜索功能示例
Feb 20 PHP
[原创]PHP global全局变量经典应用与注意事项分析【附$GLOBALS用法对比】
Jul 12 PHP
PHP下载文件函数与用法示例
Sep 27 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采集静态页面并把页面css,img,js保存的方法
2014/12/23 PHP
jquery实现的图片点击滚动效果
2014/04/29 Javascript
使用jQuery实现验证上传图片的格式与大小
2014/12/03 Javascript
学习JavaScript设计模式(链式调用)
2015/11/26 Javascript
如何获取元素的最终background-color
2017/02/06 Javascript
使用 NodeJS+Express 开发服务端的简单介绍
2017/04/07 NodeJs
Node.js v8.0.0正式发布!看看带来了哪些主要新特性
2017/06/02 Javascript
Three.js利用dat.GUI如何简化试验流程详解
2017/09/26 Javascript
vue路由嵌套的SPA实现步骤
2017/11/06 Javascript
easyui下拉框动态级联加载的示例代码
2017/11/29 Javascript
jQuery实现的简单拖拽功能示例【测试可用】
2018/08/14 jQuery
Vue多环境代理配置方法思路详解
2019/06/21 Javascript
微信小程序 网络通信实现详解
2019/07/23 Javascript
Angular8基础应用之表单及其验证
2019/08/11 Javascript
JS删除数组指定值常用方法详解
2020/06/04 Javascript
JavaScript手写数组的常用函数总结
2020/11/22 Javascript
[02:15]2014DOTA2国际邀请赛 专访LGD.lin小兔子是大腿
2014/07/14 DOTA
[40:56]2018DOTA2亚洲邀请赛 3.31 小组赛 A组 Liquid vs TNC
2018/04/01 DOTA
Python实现爬取百度贴吧帖子所有楼层图片的爬虫示例
2018/04/26 Python
python实现字符串和字典的转换
2018/09/29 Python
pytest中文文档之编写断言
2019/09/12 Python
Python 依赖库太多了该如何管理
2019/11/08 Python
PyTorch实现更新部分网络,其他不更新
2019/12/31 Python
Python tkinter 下拉日历控件代码
2020/03/04 Python
python-xpath获取html文档的部分内容
2020/03/06 Python
python 如何区分return和yield
2020/09/22 Python
印尼在线精品店:Berrybenka.com
2016/10/22 全球购物
英国卫浴商店:Ergonomic Design
2019/09/22 全球购物
Sisley法国希思黎美国官方网站:享誉全球的奢华植物美容品牌
2020/06/27 全球购物
生产总经理岗位职责
2013/12/19 职场文书
农场厂长岗位职责
2013/12/28 职场文书
一年级学生期末评语
2014/04/21 职场文书
施工员岗位职责范本
2015/04/11 职场文书
用Python将GIF动图分解成多张静态图片
2021/06/11 Python
详解JAVA中的OPTIONAL
2021/06/14 Java/Android
JavaScript实现优先级队列
2021/12/06 Javascript