學習要點: 1.模版定義 2.賦值和渲染 3.模版地址 4.獲取內容
?
本節課,我們將要學習一下 ThinkPHP 視圖,視圖是 Web 的可見內容,一般是 HTML 結合 PHP 獲取的數據提供給用戶使用的部分,屬于 MVC 中的 V。
一.模版定義 模版在使用之前需要一定的設置,才能方便開發者使用。每個模塊的模版文件是獨立的, 為了對模版文件更加有效的管理,ThinkPHP 對模版文件機型目錄劃分,默認的模版文件定 義規則是: 視圖目錄/[模版主題/]控制器名/操作名+模版后綴 第一步:在 User 控制器模塊執行一條語句: //渲染模版輸出 $this->display(); 什么都沒有定義的情況下,會自動報錯,錯誤信息提示如下: 模板不存在:./Weibo/Home/View/User/index.html 通過這個錯誤提示,我們只要在 View 目錄下創建 User 目錄,并在 User 目錄下創建 index.html 文件,這時模版渲染模版輸出成功。 默認情況下視圖目錄是 View,如果你想改變成別的目錄名可以設置: //修改模版的視圖目錄 'DEFAULT_V_LAYER' =>'Template', 默認情況下的模版文件后綴是.html,如果你想改變成別的后綴可以設置: //修改模版中的文件的后綴 'TMPL_TEMPLATE_SUFFIX'=>'.tpl' 如果感覺每一個模塊,都要創建相應的目錄太過于麻煩,可以設置: //用下劃線代替目錄層次 'TMPL_FILE_DEPR'=>'_', //User_index.tpl 如果不想將模版存在在當前 Weibo 目錄下,而設置在外部: //設置外部的模版目錄 'VIEW_PATH'=>'./Public/', 如果一個系統要考慮多套界面皮膚的話,要考慮到默認皮膚以及可選皮膚: //設置默認主題目錄 'DEFAULT_THEME'=>'default', //切換主題 $this->theme('blue')->display(); 二.賦值和渲染 如果要在模版中輸出變量,必須在控制器中把變量傳遞給模版。ThinkPHP 提供了 assign 方法對模版變量賦值,無論何種變量類型都統一使用 assign 賦值。 //給模版傳遞一個變量 $this->assign('user', '蠟筆小新'); //模版中調用變量 {$user} PS:這個方法必須在 display()方法之前使用,保存變量正確傳遞。
渲染模版輸出使用的是 display 方法,有三個可選參數: display([模版文件][,字符編碼][,輸出類型]); 如果不傳遞任何參數,它會按照默認的目錄定位模版的位置: 當前模塊/默認視圖目錄/當前控制器/當前操作.html //不傳參數 $this->display(); ./Weibo/Home/View/default/User/index.tpl //修改默認模版 $this->display('add'); ./Weibo/Home/View/default/User/add.tpl //修改默認模版,目錄加模版 $this->display('Bbb/add'); ./Weibo/Home/View/default/Bbb/add.tpl //修改默認模版,模塊加目錄加模版 $this->display('Admin@Bbb/add'); ./Weibo/Admin/View/default/Bbb/add.tpl //修改默認模版,主題加目錄加模版 $this->theme('blue')->display('Bbb/add'); ./Weibo/Home/View/blue/Bbb/add.tpl //修改默認模版,自定義模版 $this->display('./Template/Public/add.tpl'); ./Template/Public/add.tpl //Template 和 Weibo 同級 //修改默認模版,指定編碼和文件類型,一般不用填寫,默認即可 $this->display('add', 'utf-8', 'text/xml');
三.模版地址 ThinkPHP 封裝了一個 T 函數,專門用于生成模版文件。格式如下: T([資源://][模塊@][主題/][控制器/]操作,[視圖分層]); //輸出當前模版地址 echo T(); 當然可以結合上面講的所有定義方法來自定義模版: echo T('Public/add') echo T('Admin@index'); echo T('Admin@Public/add', 'Template'); //直接使用T函數輸出 $this->display(T()); 四.獲取內容 如果需要獲取模版的內容,可以使用 fetch()方法,這個方法的使用和 display()方 法一致。 //獲取模版里的內容 $content = $this->fetch(); var_dump($content); //通過內容再渲染輸出 $this->show($content); PS:使用 fetch()方法獲取內容,主要是為了可以處理和過濾更加復雜的內容。然后 處理后再由 show()方法輸出。 感謝收看