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函数)
Oct 09 PHP
完美解决dedecms中的[html][/html]和[code][/code]问题
Mar 20 PHP
DedeCMS 核心类TypeLink.class.php摘要笔记
Apr 07 PHP
让Nginx支持ThinkPHP的URL重写和PATHINFO的方法分享
Aug 08 PHP
推荐5款跨平台的PHP编辑器
Dec 25 PHP
php实现redis数据库指定库号迁移的方法
Jan 14 PHP
PHP常用的排序和查找算法
Aug 06 PHP
php文件操作小结(删除指定文件/获取文件夹下的文件名/读取文件夹下图片名)
May 09 PHP
微信支付扫码支付php版
Jul 22 PHP
Yii2中设置与获取别名的函数(setAlias和getAlias)用法分析
Jul 25 PHP
PHP的mysqli_set_charset()函数讲解
Jan 23 PHP
PHP使用redis位图bitMap 实现签到功能
Oct 08 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/04/28 PHP
php多任务程序实例解析
2014/07/19 PHP
php绘图之生成饼状图的方法
2015/01/24 PHP
PHP使用array_fill定义多维数组的方法
2015/03/18 PHP
Alliance vs AM BO3 第一场2.13
2021/03/10 DOTA
javascript 单选框,多选框美化代码
2008/08/01 Javascript
javascipt匹配单行和多行注释的正则表达式
2013/11/20 Javascript
jQuery插件zTree实现更新根节点中第i个节点名称的方法示例
2017/03/08 Javascript
anime.js 实现带有描边动画效果的复选框(推荐)
2017/12/24 Javascript
vue2.0 下拉框默认标题设置方法
2018/08/22 Javascript
vue+elementUI 复杂表单的验证、数据提交方案问题
2019/06/24 Javascript
微信小程序基于高德地图查找位置并显示文字
2019/10/30 Javascript
封装一下vue中的axios示例代码详解
2020/02/16 Javascript
Vue通过getAction的finally来最大程度避免影响主数据呈现问题
2020/04/24 Javascript
使用js获取身份证年龄的示例代码
2020/12/11 Javascript
Vue实现简单计算器
2021/01/20 Vue.js
python列表操作使用示例分享
2014/02/21 Python
使用Python的Zato发送AMQP消息的教程
2015/04/16 Python
Python线性方程组求解运算示例
2018/01/17 Python
Python3.6连接Oracle数据库的方法详解
2018/05/18 Python
python3实现随机数
2018/06/25 Python
3分钟学会一个Python小技巧
2018/11/23 Python
Django框架实现的分页demo示例
2019/05/25 Python
python自动下载图片的方法示例
2020/03/25 Python
Python如何设置指定窗口为前台活动窗口
2020/08/12 Python
video实现有声音自动播放的实现方法
2020/05/20 HTML / CSS
Omio葡萄牙:全欧洲低价大巴、火车和航班搜索和比价
2019/02/09 全球购物
一套Java笔试题
2016/08/20 面试题
法学毕业生自我鉴定
2013/11/08 职场文书
新春文艺演出主持词
2014/03/27 职场文书
企业环保标语
2014/06/10 职场文书
中国梦演讲稿开场白
2014/08/28 职场文书
2014年幼儿园个人工作总结
2014/11/10 职场文书
2015年反洗钱工作总结
2015/04/25 职场文书
世界名著读书笔记
2015/06/25 职场文书
2016简单的租房合同范本
2016/03/18 职场文书