在包含的Dwoo模板中重新分配父变量

时间:2010-01-05 11:27:52

标签: php templates reference dwoo

我有一个Dwoo模板 - 例如base.html,并且有一个数组$data

{assign '' 'globalVar'} {* $globalVar empty right now *}


{foreach $data element}
    {include '_partial.html'}
{/foreach}

...

<b>{$globalVar}</b>

这里是_partial.html

<p>
    {$element.someText}
</p>

{assign "$globalVar $element.someVar" 'globalVar'}

我想要获得什么?在每个部分文件中,我想在$globalVar之后修改我想要使用的{foreach}

这是一件很重要的事情 - 我不想在{assign}中做部分base.html!仅限于_partial.html

是否可以通过引用将$globalvar传递给_partial.html,因此部分文件会修改此变量?

2 个答案:

答案 0 :(得分:1)

我想说你可以采取两种方法,但没有很好的方法从模板本身做到这一点。

最简单的方法是在拼写$ dwoo-&gt; get之前创建一个变量,并通过引用分配它,如果您正在使用Dwoo_Data对象:

$globalVar = '';
$data->assignByRef('globalVar', $globalVar);

如果您没有使用Dwoo_Data对象,请改为:

$globalVar = '';
$data['globalVar'] =& $globalVar;

这基本上将变量初始化为引用,因此它将作为对包含模板的引用传递。

然后在部分模板中,我建议分配这样的,因为它更容易,但这取决于你:

{$globalVar .= $element.someVar}

另一种选择是在数据中添加一个新的stdClass()对象,然后就可以像

那样分配东西了。
{$globalObj->stuff .= $element.someVar}

由于它是一个对象,它将自动通过引用传递,因此也可以解决您的问题。

所以是的,它是可行的,但是你必须在你进入模板之前“计划”,因为你不能只是从包含的模板中将数据传回父模板。

我希望有帮助, 干杯

答案 1 :(得分:0)

我没有找到任何真正的解决方案 - 只是这个解决方法:

Dwoo允许访问$dwoo.get.variable$dwoo.post.variable等超级全局变量。

我们可以获取数据或设置,所以在_partial.html我做了类似的事情:

{$dwoo.env.globalVar "$globalVar $element.someVar"}

base.html我现在可以通过以下方式访问它:

{$dwoo.env.globalVar}