thinkPHP5框架widget功能与用法及实例详解

2018-11-0513:36:45后端程序开发Comments2,052 views字数 1692阅读模式

实例讲述了thinkPHP5框架中widget的功能与用法。文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

注意:使用助手函数return view()渲染,则挂件功能会失败,必须使用return $this->fetch()文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

我们在使用模板的时候,一般网站的顶部(比如说导航栏,或者用户登录区域等等),以及网站的尾部footer(比如友情链接或者版权说明等等),和body区域,我们会为了简化代码,都会将这三个部分剖开分离,然后通过模板继承的方式来使用.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

但是如果顶部和尾部只是单纯的html代码还好说,但是里面通常有变量赋值和循环遍历以及判断等逻辑.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

当然原始的方法就是我们在这两个区域里面使用原生的php代码来实现,但是这并不符合thinkphp5框架的理念,所以就早期的版本中就有widget这个东东,熟悉wordpress和yii框架的都非常熟悉,这个都是建成挂件,小部件的东西.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

他可以非常方便的让你在网站某一区域设置包含变量循环等输出,比如广告模块,日历模块,等等.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

下面就介绍如何在thinkphp5中简单的使用这项功能.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

首先我们需要在模块目录下,简历widget目录,然后在里面建立Blog控制器,然后在index的方法中写下如下代码:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

注意,代码中的Book为我自定义的模型,只是配合举例来用.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

当然你可以继承Controller,也可以选择不继承,这取决于你使用框架的习惯,当然如果不继承,你需要使用view助手渲染模板.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

代码的意思就是将模型Book中的数据取出,并赋值到模板中.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

重点:$this->fetch();不要以为里面不写模板路径就会默认只想view视图下blog文件夹中的index视图,在widget这里是不行的,必须填写对应视图路径.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

对应的视图路径为view视图下的blog目录下index.html,当然i你可以自定义视图名称文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

  1. namespace app\index\widget;
  2. use app\index\model\Book;
  3. use think\Controller;
  4. class Blog extends Controller
  5. {
  6.   public function index()
  7.   {
  8.     $list = Book::all();
  9.     $this->assign('list',$list);
  10.     return $this->fetch('widget/index');
  11.   }
  12. }

然后在view/blog/index.html中代码如下,仅作示例来用,在这里自定义输出遍历了指定内容:文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

  1. {volist name="list" id="v"}
  2. <p>{$v.id}+{$v.bookname}</p>
  3. {/volist}

你可以在实际应用中使用任何想需要的功能,比如说导航栏遍历输出,或者许多许多挂件模块.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

如何调用呢,你可以在你的指定视图模板中或者在继承的公共模板中使用以下文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

{:widget('Blog/index')} 这种方式来输出,Blog为widget目录下的控制器,index为控制器中的方法名.文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4.   <meta charset="UTF-8">
  5.   <meta name="viewport"
  6.      content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
  7.   <meta http-equiv="X-UA-Compatible" content="ie=edge">
  8.   <title>Document</title>
  9. </head>
  10. <body>
  11.   <p>这里显示的默认主页输出内容</p>
  12.   <p>如果widget使用正常,下面将输出遍历一个数据表的内容</p>
  13.   {:widget('Blog/index')}
  14. </body>
  15. </html>

至此,完成输出以下页面!文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

这里显示的默认主页输出内容,如果widget使用正常,下面将输出遍历一个数据表的内容文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

1+weilai文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

2+yanyan文章源自菜鸟学院-https://www.cainiaoxueyuan.com/bc/7665.html

  • 本站内容整理自互联网,仅提供信息存储空间服务,以方便学习之用。如对文章、图片、字体等版权有疑问,请在下方留言,管理员看到后,将第一时间进行处理。
  • 转载请务必保留本文链接:https://www.cainiaoxueyuan.com/bc/7665.html

Comment

匿名网友 填写信息

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen:

确定