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基础知识:类与对象(3) 构造函数和析构函数
Dec 13 PHP
Discuz 5.0 中读取纯真IP数据库函数分析
Mar 16 PHP
探讨:parse url解析URL,返回其组成部分
Jun 14 PHP
PHP代码优化的53个细节
Mar 03 PHP
PHP编程中的常见漏洞和代码实例
Aug 06 PHP
PHP获取数组最后一个值的2种方法
Jan 21 PHP
PHP Opcache安装和配置方法介绍
May 28 PHP
PHP实现原生态图片上传封装类方法
Nov 08 PHP
PHP带节点操作的无限分类实现方法详解
Nov 09 PHP
Yii2数据库操作常用方法小结
May 04 PHP
基于PHP实现的多元线性回归模拟曲线算法
Jan 30 PHP
如何解决PHP获取不到SESSION信息之一般情况
Oct 10 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
抓取YAHOO股票报价的类
2009/05/15 PHP
php中根据变量的类型 选择echo或dump
2012/07/05 PHP
PHP模板解析类实例
2015/07/09 PHP
PHP随手笔记整理之PHP脚本和JAVA连接mysql数据库
2015/11/25 PHP
js自带函数备忘 数组
2006/12/29 Javascript
让JavaScript拥有类似Lambda表达式编程能力的方法
2010/09/12 Javascript
js 连接数据库如何操作数据库中的数据
2012/11/23 Javascript
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
JS不间断向上滚动效果代码
2013/12/25 Javascript
js获取当前地址 JS获取当前URL的示例代码
2014/02/26 Javascript
JS跨域问题详解
2014/11/25 Javascript
js实现iframe跨页面调用函数的方法
2014/12/13 Javascript
JS实现控制表格行文本对齐的方法
2015/03/30 Javascript
7个有用的jQuery代码片段分享
2015/05/19 Javascript
JS响应鼠标点击实现两个滑块区间拖动效果
2015/10/26 Javascript
JavaScript实现页面定时刷新(定时器,meta)
2016/10/12 Javascript
Bootstrap源码学习笔记之bootstrap进度条
2016/12/24 Javascript
JS实现判断图片是否加载完成的方法分析
2018/07/31 Javascript
浅谈webpack SplitChunksPlugin实用指南
2018/09/17 Javascript
用vuex写了一个购物车H5页面的示例代码
2018/12/04 Javascript
后台使用freeMarker和前端使用vue的方法及遇到的问题
2019/06/13 Javascript
python 生成不重复的随机数的代码
2011/05/15 Python
python实现微信跳一跳辅助工具步骤详解
2018/01/04 Python
Python批量发送post请求的实现代码
2018/05/05 Python
python爬取网页转换为PDF文件
2018/06/07 Python
Python Cookie 读取和保存方法
2018/12/28 Python
分析经典Python开发工程师面试题
2019/04/08 Python
python的debug实用工具 pdb详解
2019/07/12 Python
使用python写的opencv实时监测和解析二维码和条形码
2019/08/14 Python
Python3和PyCharm安装与环境配置【图文教程】
2020/02/14 Python
Python中return函数返回值实例用法
2020/11/19 Python
python中threading和queue库实现多线程编程
2021/02/06 Python
灵泰克Java笔试题
2016/01/09 面试题
快餐店的创业计划书范文
2014/01/29 职场文书
优秀部门获奖感言
2014/02/14 职场文书
2015年资料员工作总结
2015/04/25 职场文书