0

I have a Dwoo template - in example base.html and there is an array $data.

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


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

...

<b>{$globalVar}</b>

And here is _partial.html

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

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

What I want to gain ? In every partial file I want to modify some $globalVar that I want to use after {foreach}.

And here is an important thing - I do not want to do the partial's {assign} in base.html ! Only in _partial.html.

Is it possible to pass $globalvar to _partial.html by reference so partial file would modify this variable ?

4

2 回答 2

1

我想说您可以采用两种方法,但是从模板本身没有真正好的方法来做到这一点。

最简单的方法是在调用 $dwoo->get 之前创建一个变量,并通过引用分配它,如果您使用的是 Dwoo_Data 对象,您只需执行以下操作:

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

如果您不使用 Dwoo_Data 对象,请改为执行以下操作:

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

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

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

{$globalVar .= $element.someVar}

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

{$globalObj->stuff .= $element.someVar}

而且由于它是一个对象,它会自动通过引用传递,这样也解决了你的问题。

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

我希望这会有所帮助,干杯

于 2010-01-07T14:47:34.403 回答
0

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

$dwoo.get.variableDwoo 允许使用or$dwoo.post.variable等​​访问超全局变量。

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

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

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

{$dwoo.env.globalVar}
于 2010-01-05T12:58:23.480 回答