Smarty中实现Layout机制 收藏 评论
2017年02月20日

class MyAbstract extends Smarty {
/** @var string 模板所用layout */
protected $_layout_  = 'default.tpl';
}
//在上述代码中,我们定义了一个 $layout 的成员变量,用来存放所用 layout 值,默认使用 ‘default.tpl’ 文件。然后我们需要重载 Smarty 的 display() 函数,以支持 layout 机制:
class MyAbstract extends Smarty {
/** @var string 模板所用layout */  protected $_layout_  = 'default.tpl';
public function display($page, $pid = null) {
/** 使用 layout 机制 */    $this->assign('NACHO_CONTENT_FOR_LAYOUT', $page);
parent::display('layouts/' . $this->_layout_, $pid); // 最后的smarty显示处理,调用Smarty原始函数
}
}
//在 display() 函数中,我们将本应要显示的模板文件设置为 NACHO_CONTENT_FOR_LAYOUT Smarty 变量,然后让 Smarty 父类去渲染我们自定义的 layout 文件,而不是调用者传递进来的 $page。这样,我们需要在 layouts/default.tpl 文件中去包含 $page 文件:
//...... // html 代码<div class="page_body">{include file="$NACHO_CONTENT_FOR_LAYOUT"}</div>...... // html 代码
//具体到某个 PHP 程序,只需要继承 MyAbstract,和普通 Smarty 程序一样调用 display() 函数:
class TestApp extends MyAbstract {
public function doAction() {    ...... PHP 代码    $this->display('testapp/doaction.tpl');    return;  }
}
//如此,你只需要将整体模板文件放到 layouts/ 目录,将具体模板文件放到对应目录(比如上述的 testapp/doaction.tpl ),就可以方便的使用 layout 机制了;每个单独 PHP 可以通过设定自定义 $layout 这个成员变量选用自己的 layout 模板。


http://blog.webinno.cn/article/view/162

本文地址:http://blog.webinno.cn/article/view/162

发表于 @ 2017年02月20日 | 浏览631次| 编辑 |评论(loading... ) | 分享到:QQ空间新浪微博腾讯微博微信

评论列表

发表评论