改变Smarty中包含文件中的数组

时间:2014-07-23 16:06:07

标签: arrays smarty pass-by-reference

main.tpl

{$array=['first']}
{include file="sub.tpl"}
{var_dump($array)}

sub.tpl

{$array[]='second'}
{var_dump($array)}

结果:

array (size=2)
  0 => string 'first' (length=5)
  1 => string 'second' (length=6)
array (size=1)
  0 => string 'first' (length=5)

如何通过引用传递$array,以便在'second'完成后$array也在include中?

1 个答案:

答案 0 :(得分:0)

有解决方案,但你应该重新考虑你的Smarty用法。 Smarty应仅用于显示数据,实际上您有时需要创建临时变量,并且创建/附加到数组似乎不是这种情况。

如果可能的话,您应该始终准备要在PHP和Smarty中显示的数据,您应该在不进行复杂计算和分配的情况下显示它们。

在您的情况下,您需要使用scope,因此您应该使用:

{$array[]='second' scope='global'}

如上所述范围global或范围parent

然而,正如我所说,你很可能在PHP中做得更好。