使用smarty做頁面模版時,smarty並沒有提供一個可以做整體布局的方法,每個頁面都要寫多個include共同的模版塊。可以對smarty進行改造,讓其支持layout機制。
在smarty中建類 MySmarty.class.php
<?php
include_once 'Smarty.class.php';
class MySmarty extends Smarty {
/** @var string 模板所用layout */
public $layouts = false;
public function display($template = NULL, $cache_id = NULL, $compile_id = NULL, $parent = NULL) {
/** 使用 layout 機制 */
if ($this->layouts) {
$this->assign('CONTENT_FOR_LAYOUT', $template);
parent::display($this->layouts, $cache_id, $compile_id, $parent);
// 最後的smarty顯示處理,調用Smarty原始函數
} else {
parent::display($template, $cache_id, $compile_id, $parent);
}
}
}
?>
在模板文件夾建文件夾 layouts,裡面放layout文件,layout文件中用以下方式加載內容
<div class="page_body">{include file="$CONTENT_FOR_LAYOUT"}</div>
實例化smarty時,設置layout文件
$smarty = new MySmarty();
$smarty -> layouts = 'layouts/main.tpl';
在不需要加載layout時,賦值為false停用。
$smarty -> layouts = false;
// 不使用layout
$smarty -> display('index.tpl');