第一種方式:全局配置方式
需要配置開啓layout_on 參數(默認不開啓),並且設置佈局入口文件名layout_name(默認爲layout)
這個是在application/config.php文件裏
'template' => [
//開啓layout_on
'layout_on' => true,
//目錄位置
'layout_name' => 'layout/layoutname',
//佈局替換變量
'layout_item' => '{__CONTENT__}'
]
注意:
在配置文件中 ‘url_html_suffix’ => ‘html’, 這想必須是html,不然模板輸出的時候會格式不正確。我因爲這個不小心配置成了json格式的結果模板輸出全是json格式,就連html標籤都輸出了。
然後是控制器,其實控制器不需要有什麼配置。如果沒人任何需要輸出的內容就算是空的控制器也是可以的。
<?php
namespace app\index\controller;
use think\Controller;
class Index extends Controller
{
/**
* @param string $name
*/
public function index()
{
return $this->fetch();
}
}
?>
佈局模板,這個意思很明啦。就是吧分開了的頭部尾部中間部分按這個模板的規則統一導入進來。
{include file="layout/header" /}
{__CONTENT__}
{include file="layout/footer" /}
上面這個是在layoutname.html文件上的代碼,因爲我在配置文件中配置的是 'layout_name' => 'layout/layoutname'
所以他的佈局模板文件位置就是 application/index/view/layout/layoutname.html 還有header和footer兩個文件都在這個文件夾下。
下面這個是header頭部文件的內容
<!doctype html>
<html>
<head>
<title>頭部信息</title>
</head>
<body>
這個是頭部信息
這個是footer尾部內容
這個是底部信息
</body>
</html>
中間部分就是控制器的操作模板,也就是當前控制器的index操作 application/index/view/Index/index.html
{//__NOLAYOUT__}
<div>
這是 layout 模板佈局
中間內容
</div>
{//__NOLAYOUT__} 這個是如果在這個模板裏不想使用佈局模板的話用{__NOLAYOUT__} 可以屏蔽掉佈局模板的頭部和尾部。雙斜槓”//”是我註釋掉了這個變量,用的時候你需要把“//”去掉哦。
接下來我們看看輸出結果:
現在開啓 {__NOLAYOUT__} 這個變量看看結果是怎樣的!
在這裏我需要提醒一下在開啓 {__NOLAYOUT__} 之後刷新瀏覽器之前先清空一下runtime\temp 這個目錄的緩存文件。
要不然刷新是沒有效果的哦。
好了!現在可以真正的刷新瀏覽器看看結果啦。
我們可以看到頭部和尾部的信息都已經沒有了,說明測試已經成功了。
第二種方式:模板標籤方式
這種方法就簡單多了,不需要在配置文件中設置任何參數,也不需要開啓layout_on,直接在模板文件中指定佈局模板即可,相關的佈局模板調整也在模板中進行。
以前面的輸出模板爲例,這種方式的入口還是在Index/index.html 模板,但是我們可以修改下add模板文件的內容,在頭部增加下面的佈局標籤(記得首先關閉前面的layout_on設置,否則可能出現佈局循環):
{layout name=”layout/layoutname” /}
就表示採用application/index/view/layout/layoutname.html作爲佈局模板
下面我們來看看模板的代碼實現
{layout name="layout/layoutname" /}
{//__NOLAYOUT__}
<div>
這是 layout 模板佈局
中間內容
</div>
這裏在次強調,除了header和footer兩個模板保持不變之外,在配置文件中部不需要做任何配置。
接下來刷新看結果如何,同樣刷新需要清空緩存。
還可以在layout標籤裏面指定要替換的特定字符串:
{layout name=”layout/layoutname” replace=”[REPLACE]” /}
注意:替換字符在這裏不能用花括號,用中括號或是別的什麼都可以就算不用括號也行。要不然會替換不了內容。
還可以在模板佈局中的設置一些變量,例如:
設置title變量
{include file="layout/header" title="這是 layout 傳過來的title"/}
__REPLACE__
{include file="layout/footer" /}
然後在header文件中接收一下title
<!doctype html>
<html>
<head>
<title>[title]</title>
</head>
<body>
這個是頭部信息
結果就是:
title被改變了。
還有第三種方法,我這裏就不介紹了。這種方法就是在裏面調用tp函數設置的,用法也很簡單有興趣的可以自己去看看。