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 相关文章推荐
第四节 构造函数和析构函数 [4]
Oct 09 PHP
如何把PHP转成EXE文件
Oct 09 PHP
php addslashes 函数详细分析说明
Jun 23 PHP
php中is_null,empty,isset,unset 的区别详细介绍
Apr 28 PHP
php实现利用phpexcel导出数据
Aug 24 PHP
基于PHP的简单采集数据入库程序
Jul 30 PHP
php上传中文文件名乱码问题处理方案
Feb 03 PHP
Nginx环境下PHP flush失效的解决方法
Oct 19 PHP
php 微信公众平台开发模式实现多客服的实例代码
Nov 07 PHP
PHP实现图片批量打包下载功能
Mar 01 PHP
laravel 5.3 单用户登录简单实现方法
Oct 14 PHP
tp5.1 实现setInc字段自动加1
Oct 18 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操作redis中的hash和zset类型数据的方法和代码例子
2014/07/05 PHP
thinkphp普通查询与表达式查询实例分析
2014/11/24 PHP
Codeigniter控制器controller继承问题实例分析
2016/01/19 PHP
php 使用expat方式解析xml文件操作示例
2019/11/26 PHP
新手常遇到的一些jquery问题整理
2010/08/16 Javascript
jQuery+css+html实现页面遮罩弹出框
2013/03/21 Javascript
JQuery给元素添加/删除节点比如select
2013/04/02 Javascript
JavaScript中的eval()函数详解
2013/08/22 Javascript
学习JavaScript设计模式之享元模式
2016/01/18 Javascript
onmouseover事件和onmouseout事件全面理解
2016/08/15 Javascript
分享JavaScript监听全部Ajax请求事件的方法
2016/08/28 Javascript
js中的DOM模拟购物车功能
2017/03/22 Javascript
利用Vue实现移动端图片轮播组件的方法实例
2017/08/23 Javascript
vue.js select下拉框绑定和取值方法
2018/03/03 Javascript
如何获取vue单文件自身源码路径
2019/05/06 Javascript
jQuery模拟html下拉多选框的原生实现方法示例
2019/05/30 jQuery
node爬取新型冠状病毒的疫情实时动态
2020/02/06 Javascript
vue-video-player实现实时视频播放方式(监控设备-rtmp流)
2020/08/10 Javascript
vue 动态给每个页面添加title、关键词和描述的方法
2020/08/28 Javascript
[50:59]2018DOTA2亚洲邀请赛 4.7 总决赛 LGD vs Mineski第四场
2018/04/10 DOTA
python获取本机外网ip的方法
2015/04/15 Python
Python实现给qq邮箱发送邮件的方法
2015/05/28 Python
python实现用户答题功能
2018/01/17 Python
tensorflow学习笔记之mnist的卷积神经网络实例
2018/04/15 Python
numpy 对矩阵中Nan的处理:采用平均值的方法
2018/10/30 Python
Python3.5内置模块之os模块、sys模块、shutil模块用法实例分析
2019/04/27 Python
利用anaconda作为python的依赖库管理方法
2019/08/13 Python
jupyter notebook运行命令显示[*](解决办法)
2020/05/18 Python
pytorch查看模型weight与grad方式
2020/06/24 Python
HTML5+CSS3实例 :canvas 模拟实现电子彩票刮刮乐代码
2016/12/30 HTML / CSS
Myprotein芬兰官网:欧洲第一运动营养品牌
2019/05/05 全球购物
俄罗斯美容和健康网上商店:Созвездие Красоты
2019/07/23 全球购物
《水上飞机》教学反思
2014/04/10 职场文书
网吧员工管理制度
2015/08/05 职场文书
利用html+css实现菜单栏缓慢下拉效果的示例代码
2021/03/30 HTML / CSS
CSS实现隐藏搜索框功能(动画正反向序列)
2021/07/21 HTML / CSS