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 相关文章推荐
简单介绍下 PHP5 中引入的 MYSQLI的用途
Mar 19 PHP
用php实现百度网盘图片直链的代码分享
Nov 01 PHP
php使用反射插入对象示例分享
Mar 11 PHP
smarty缓存用法分析
Dec 16 PHP
php实现检查文章是否被百度收录
Jan 27 PHP
PHP中curl_setopt函数用法实例分析
Apr 16 PHP
PHP 绘制网站登录首页图片验证码
Apr 12 PHP
自定义min版smarty模板引擎MinSmarty.class.php文件及用法
May 20 PHP
Laravel5.1框架注册中间件的三种场景详解
Jul 09 PHP
Yii框架实现对数据库的CURD操作示例
Sep 03 PHP
php实现快速对二维数组某一列进行组装的方法小结
Dec 04 PHP
windows系统php环境安装swoole具体步骤
Mar 04 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编程中echo用逗号和用点号连接的区别
2016/03/26 PHP
PHP操作XML中XPath的应用示例
2019/07/04 PHP
javascript的onchange事件与jQuery的change()方法比较
2009/09/28 Javascript
框架页面高度自动刷新的Javascript脚本
2013/11/01 Javascript
javascript ajax的5种状态介绍
2014/08/18 Javascript
JQuery中使用.each()遍历元素学习笔记
2014/11/08 Javascript
javascript 回调函数详解
2014/11/11 Javascript
Bootstrap面板(Panels)的简单实现代码
2017/03/17 Javascript
详解Angular中的自定义服务Service、Provider以及Factory
2017/04/22 Javascript
如何通过非数字与字符的方式实现PHP WebShell详解
2017/07/02 Javascript
js实现一个简单的MVVM框架示例
2018/01/15 Javascript
vue-auto-focus: 控制自动聚焦行为的 vue 指令方法
2018/08/25 Javascript
解决vue-cli webpack打包后加载资源的路径问题
2018/09/25 Javascript
vue实现的双向数据绑定操作示例
2018/12/04 Javascript
js实现旋转的星空效果
2019/11/01 Javascript
JS插件amCharts实现绘制柱形图默认显示数值功能示例
2019/11/26 Javascript
vue实现移动端input上传视频、音频
2020/08/18 Javascript
浅谈Vue使用Elementui修改默认的最快方法
2020/12/05 Vue.js
[44:30]完美世界DOTA2联赛PWL S2 GXR vs Magma 第一场 11.25
2020/11/26 DOTA
Python 字典(Dictionary)操作详解
2014/03/11 Python
Python数据分析之获取双色球历史信息的方法示例
2018/02/03 Python
Python高斯消除矩阵
2019/01/02 Python
Python numpy多维数组实现原理详解
2020/03/10 Python
俄罗斯名牌服装网上商店:UNIQUE FABRIC
2019/07/25 全球购物
华为慧通面试题
2012/09/11 面试题
总经理职责
2013/12/22 职场文书
初一家长会邀请函
2014/01/31 职场文书
车间主任岗位职责
2014/03/16 职场文书
大学生社会实践方案
2014/05/11 职场文书
个人综合鉴定材料
2014/05/23 职场文书
常务副总经理任命书
2014/06/05 职场文书
起诉离婚协议书样本
2014/11/25 职场文书
小学教师师德培训心得体会
2016/01/09 职场文书
什么是求职信?求职信应包含哪些内容?
2019/08/14 职场文书
导游词之张家口
2019/12/13 职场文书
Spring Data JPA的Audit功能审计数据库的变更
2021/06/26 Java/Android