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 相关文章推荐
SMARTY学习手记
Jan 04 PHP
php empty,isset,is_null判断比较(差异与异同)
Oct 19 PHP
php中显示数组与对象的实现代码
Apr 18 PHP
apache mysql php 源码编译使用方法
May 03 PHP
PHP文章采集URL补全函数(FormatUrl)
Aug 02 PHP
php简单浏览目录内容的实现代码
Jun 07 PHP
PHP检测移动设备类mobile detection使用实例
Apr 14 PHP
CodeIgniter模板引擎使用实例
Jul 15 PHP
php中get_defined_constants函数用法实例分析
May 12 PHP
PHP实现简单实用的分页类代码
Apr 08 PHP
thinkphp3.x连接mysql数据库的方法(具体操作步骤)
May 19 PHP
php7 安装yar 生成docker镜像
May 09 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
一个简单的MySQL数据浏览器
2006/10/09 PHP
php Sql Server连接失败问题及解决办法
2009/08/07 PHP
php中防止SQL注入的最佳解决方法
2013/04/25 PHP
php中的mongodb select常用操作代码示例
2014/09/06 PHP
Zend Framework入门教程之Zend_Db数据库操作详解
2016/12/08 PHP
PHP fprintf()函数用法讲解
2019/02/16 PHP
关于laravel后台模板laravel-admin select框的使用详解
2019/10/03 PHP
IE中radio 或checkbox的checked属性初始状态下不能选中显示问题
2009/07/25 Javascript
javascript奇异的arguments分析
2010/10/20 Javascript
浏览器常用高宽的jquery插件
2011/02/24 Javascript
javascript使用百度地图api和html5特性获取浏览器位置
2014/01/10 Javascript
jQuery焦点图轮播插件KinSlideshow用法分析
2016/06/08 Javascript
jQuery自适应轮播图插件Swiper用法示例
2016/08/24 Javascript
js将字符串中的每一个单词的首字母变为大写其余均为小写
2017/01/05 Javascript
浅谈React中组件间抽象
2018/01/27 Javascript
Electron-vue开发的客户端支付收款工具的实现
2019/05/24 Javascript
Vue动态面包屑功能的实现方法
2019/07/01 Javascript
nodejs二进制与Buffer的介绍与使用
2019/07/11 NodeJs
pageGroup.js实现分页功能
2019/07/27 Javascript
Element ui 下拉多选时新增一个选择所有的选项
2019/08/21 Javascript
wepy--用vantUI 实现上弹列表并选择相应的值操作
2020/11/03 Javascript
Python提示[Errno 32]Broken pipe导致线程crash错误解决方法
2014/11/19 Python
Python实现爬虫抓取与读写、追加到excel文件操作示例
2018/06/27 Python
Django框架基础模板标签与filter使用方法详解
2019/07/23 Python
关于tf.reverse_sequence()简述
2020/01/20 Python
Python批量删除mysql中千万级大量数据的脚本分享
2020/12/03 Python
中学教师管理制度
2014/01/14 职场文书
老师给学生的表扬信
2014/01/17 职场文书
优秀应届生求职信
2014/06/16 职场文书
教师党的群众路线教育实践活动学习笔记
2014/11/05 职场文书
道歉短信大全
2015/05/12 职场文书
孔子观后感
2015/06/08 职场文书
大学生社区义工服务心得体会
2016/01/22 职场文书
Springboot使用Spring Data JPA实现数据库操作
2021/06/30 Java/Android
Python闭包的定义和使用方法
2022/04/11 Python
CSS 实现磨砂玻璃(毛玻璃)效果样式
2023/05/21 HTML / CSS