本文實例講述了thinkPHP下的widget擴展用法。分享給大家供大家參考,具體如下:
Widget擴展用於在頁面根據需要輸出不同的內容,Widget擴展的定義是在項目的Lib\Widget目錄下面定義Widget類庫,例如下面定義了一個用於顯示最近的評論的Widget:
位於Lib\Widget\ShowCommentWidget.class.php
Widget類庫需要繼承Widget類,並且必須定義render方法實現,例如:
render方法必須使用return返回要輸出的字符串信息,而不是直接輸出。
Widget也可以調用Widget類的renderFile方法,渲染模板後進行輸出。
在項目的lib目錄下建立widget目錄,與action目錄同級。
建立TestWidget.class.php:
class TestWidget extends Widget{
public function render($data){
//print_r($data);
$data['id']=$data['id'];
$data['info']=$data['info'];
$content = $this->renderFile('index',$data);
//print_r($content);
return $content;
}
}
在此目錄下建立對應的Test文件夾,下面放$this->rendFile調用的html頁面。
index.html 通過使用循環顯示數據的信息
<div>
這是widget調用的模板頁面
<foreach name="id" item="vo"> <span >//注意:id對應與$data的鍵值</span>
{$vo}
</foreach>
<br>
<foreach name="info" item="vo"> <span >//info對應於$data的鍵值</span>
<foreach name="vo" item="v">
{$v}
</foreach>
</foreach>
</div>
action方法:
IndexAction.class.php
代碼如下:
class TestAction extends Action{
public function index(){
$info=array(array("1","AA","title"),array("2","BB","title2"));
$this->assign("info",$info);
$this->display();
}
}
action調用的tpl中的html頁面的為index.html
代碼如下:
<div>
這個是test調用的action<br>
{:W('Test',array("id"=>array("ID","name","title"),"info"=>$info))} <span >//傳遞給TestWidget.class.php 的參數,要以array格式傳遞</span>
</div>
運行IndexAction.class.php
頁面顯示如下:

這樣就把show.html中的內容包含進來了
name什麼時候用widgte呢?
widget通常是一些封裝好了的JS效果組件,直接調用‘加入參數就可以得到一些效果,例如,TAB菜單、旋轉木馬、圖片輪播等交互效果
比如網站的菜單欄。右邊常不更新的欄目之類的…
方便多次調用,比如在頁面上左側顯示一個新聞列表,每個頁面如果都調用這個列表,是不是得在每個控制器裡寫一遍相同的代碼,不累麼,用widget可能只需要寫一次,然後模板中多次使用
希望本文所述對大家基於thinkPHP框架的PHP程序設計有所幫助。