嵌套的SMARTY对象跨实例访问变量

时间:2012-06-07 12:21:40

标签: php smarty template-engine

我试图以平滑可维护的方式将几个模板阶段联系在一起。我有一个外部页面,它有一个实例化的智能对象,并包含另一个实例化不同的智能对象的php页面。我的问题是,是否有任何方法可以在外部实例中分配变量并使其在内部实例中可访问。

示意我正在调用page.php:

<?php
$tpl = new Smarty();
$tpl->assign("a","Richard");
$tpl->register_function('load_include', 'channel_load_include');
$tpl->display("outer_template.tpl");
function channel_load_include($params, &$smarty) {
    include(APP_DIR . $params["page"]);
}
?>

outer_template.tpl:

<div> {load_include page="/otherpage.php"} </div>

otherpage.php:

<?php
$tpl2=new Smarty();
$tpl2->assign("b","I");
$tpl2->display("inner_template.tpl");
?>

inner_template.tpl:

<span id="pretentiousReference"> "Richard loves {$a}, that is I am {$b}" </span>

而且我看到了:“理查德喜欢,就是我就是我”

有没有办法从内部实例访问外部实例的变量,或者我应该将其转储到$_SESSION并用{php}标记拉出来?显然我的应用程序有点复杂,但这暴露了我认为的核心问题。

1 个答案:

答案 0 :(得分:2)

您可以构建智能/模板/数据实例链,以使不同实例可以访问数据。

将Smarty实例指定为另一个实例的父级:

$outer = new Smarty();
$outer->assign('outer', 'hello');
$inner = new Smarty();
$inner->parent = $outer;
$inner->assign('inner', 'world');
$inner->display('eval:{$outer} {$inner}');

或者你可以把数据拉出来:

$data = new Smarty_Data();
$data->assign('outer', 'hello');
$outer = new Smarty();
$outer->parent = $data;
$inner = new Smarty();
$inner->parent = $data;
$inner->assign('inner', 'world');
$inner->display('eval:{$outer} {$inner}');

输出“hello world”