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
版权声明:本站博客内所有原创文章及原创翻译转载需经作者同意,否则不得转载!其他文章可自由转载!
转载本站文章需注明本出处,并请注明原出处,尊重作者和版权!
发表于 @ 2017年02月20日 | 浏览1233次| 编辑 |评论(loading... ) |
评论列表