ThinkPHP3 1快速入門(15)模板布局

2022-04-06 15:32:51 字數 2127 閱讀 4891

thinkphp的模板引擎內建了布局模板功能支援,可以方便的實現模板布局以及布局巢狀功能。

有三種布局模板的支援方式:

這種方式僅需在專案配置檔案中新增相關的布局模板配置,就可以簡單實現模板布局功能,比較適用於全站使用相同布局的情況,需要配置開啟layout_on 引數(預設不開啟),並且設定布局入口檔名layout_name(預設為layout)。 'layout_on'=>true, 'layout_name'=>'layout',

複製**

開啟layout_on後,我們的模板渲染流程就有所變化,例如: classuseractionextendsaction }

複製**

在不開啟layout_on布局模板之前,會直接渲染tpl/user/add.html 模板檔案,開啟之後,首先會渲染tpl/layout.html 模板,布局模板的寫法和其他模板的寫法類似,本身也可以支援所有的模板標籤以及包含檔案,區別在於有乙個特定的輸出替換變數,例如,下面是乙個典型的layout.html模板的寫法:

複製**

讀取layout模板之後,會再解析user/add.html 模板檔案,並把解析後的內容替換到layout布局模板檔案的 特定字串。

當然可以通過設定來改變這個特定的替換字串,例如: 'tmpl_layout_item'=>''

複製**

但是乙個布局模板同時只能有乙個特定替換字串。

採用這種布局方式的情況下,一旦user/add.html 模板檔案或者layout.html布局模板檔案發生修改,都會導致模板重新編譯。

如果需要指定其他位置的布局模板,可以使用: 'layout_name'=>'layout/layoutname',

複製**

就表示採用tpl/layout/layoutname.html作為布局模板。

如果某些頁面不需要使用布局模板功能,可以在模板檔案開頭加上 字串。

如果上面的user/add.html 模板檔案裡面包含有,則即使當前開啟布局模板,也不會進行布局模板解析。

這種布局模板不需要在配置檔案中設定任何引數,也不需要開啟layout_on,直接在模板檔案中指定布局模板即可,相關的布局模板調整也在模板中進行。

以前面的輸出模板為例,這種方式的入口還是在user/add.html 模板,但是我們可以修改下add模板檔案的內容,在頭部增加下面的布局標籤(記得首先關閉前面的layout_on設定,否則可能出現布局迴圈):

複製**

表示當前模板檔案需要使用layout.html 布局模板檔案,而布局模板檔案的寫法和上面第一種方式是一樣的。當渲染user/add.html 模板檔案的時候,如果讀取到layout標籤,則會把當前模板的解析內容替換到layout布局模板的 特定字串。

乙個模板檔案中只能使用乙個布局模板,如果模板檔案中沒有使用任何layout標籤則表示當前模板不使用任何布局。

如果需要使用其他的布局模板,可以改變layout的name屬性,例如:

複製**

還可以在layout標籤裡面指定要替換的特定字串:

複製**

在引入的header和footer模板檔案中也可以新增layout標籤,例如header模板檔案的開頭新增如下標籤:

複製**

這樣就實現了在頭部模板中引用了menu布局模板。

也可以採用兩種布局方式的結合,可以實現更加複雜的模板布局以及巢狀功能。

使用內建的layout方法可以更靈活的在程式中控制模板輸出的布局功能,尤其適用於區域性需要布局或者關閉布局的情況,這種方式也不需要在配置檔案中開啟layout_on。例如: classuseractionextendsaction }

複製**

表示當前的模板輸出啟用了布局模板,並且採用預設的layout布局模板。

如果當前輸出需要使用不同的布局模板,可以動態的指定布局模板名稱,例如: classuseractionextendsaction }

複製**

或者使用layout方法動態關閉當前模板的布局功能(這種用法可以配合第一種布局方式,例如全域性配置已經開啟了布局,可以在某個頁面單獨關閉): classuseractionextendsaction }

複製**

三種模板布局方式中,第一種和第三種是在程式中配置實現模板布局,第二種方式則是單純通過模板標籤在模板中使用布局。具體選擇什麼方式,需要根據專案的實際情況來了。

ThinkPHP3 1快速入門(10)快取

在專案中,合理的使用快取對效能有較大的幫助。thinkphp提供了方便的快取方式,包括資料快取 靜態快取和查詢快取等,支援包括檔案方式 apc db memcache shmop sqlite redis eaccelerator和xcache在內的動態資料快取型別,以及可定製的靜態快取規則,並提供...

ThinkPHP3 1快速入門(9)變數輸出

這一篇我們來詳細了解下如何在模板中使用標籤輸出模板變數。變數輸出的方法很簡單,例如,在控制器中我們給模板變數賦值 name thinkphp this assign name name this display 複製 然後就可以在模板中使用 hello,複製 模板編譯後的結果就是 hello,複製 ...

ThinkPHP3 1快速入門(21)IP位址定位

可以在官網的 ip定位擴充套件類庫,或者 擴充套件包 裡面也已經包含該擴充套件類了。如果是單獨 的上傳類庫,把解壓後的iplocation.class.php 放入thinkphp extend library org net 如果沒有請手動建立 目錄下面。如果你僅僅需要獲取使用者訪問的ip位址,那...