本文實例講述了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
新聞熱點
疑難解答
圖片精選