2011-05-12 131 views
2

好吧,从头开始我正在使用最新的Smarty版本,并且设置了所有内容。Smarty模板继承 - 传递变量?

我的问题是,我有叫layout.tpl整个网站的主模板,然后为每个页面的子模板home.tpl,about.tpl等...

的index.php(家庭)

require('Smarty.class.php'); 
// -- 
$smarty = new Smarty; 
$smarty->template_dir = 'C:/xampp/htdocs/EMP3/view/templates'; 
$smarty->config_dir = 'C:/xampp/htdocs/EMP3/view/config'; 
$smarty->cache_dir = 'C:/xampp/smarty/cache'; 
$smarty->compile_dir = 'C:/xampp/smarty/templates_c'; 
$smarty->display('home.tpl'); 

Home.tpl

{extends file="layout.tpl"} 
{block name=title}Home{/block} 
{block name=body} 
<div>Sample</div> 
{/block} 

Layout.tpl

// Long html file which makes use of the blocks from home, about ect... 

我的问题是,layout.tpl中的html内容是隐藏的或显示取决于用户是管理员还是普通用户。我如何将这些PHP值传递给layout.tpl?通过home.tpl?有没有更好的方法来实现这一目标?

感谢

回答

1

我没有使用Smarty的V3和继承,只是去你上面的示例代码,但如何assign()?我知道当你有一个包含另一个文件的模板文件时,所有分配的变量仍然有效,并且能够在{include}语句中分配新变量。

的index.php(家庭)

require('Smarty.class.php'); 
// -- 
$smarty = new Smarty; 
$smarty->template_dir = 'C:/xampp/htdocs/EMP3/view/templates'; 
$smarty->config_dir = 'C:/xampp/htdocs/EMP3/view/config'; 
$smarty->cache_dir = 'C:/xampp/smarty/cache'; 
$smarty->compile_dir = 'C:/xampp/smarty/templates_c'; 

$smarty->assign('some_header', 'hello!'); 

$smarty->display('home.tpl'); 

Home.tpl(不变)

Layout.tpl

<html> 
    ... 
    <h1>{$some_header}</h1> 
    // Long html file which makes use of the blocks from home, about ect... 
</html>