Smarty模板继承 - 传递变量?

时间:2011-05-12 15:46:32

标签: php smarty templating

好的开始我正在使用最新的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 个答案:

答案 0 :(得分: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>