在模板时间内分配smarty变量

时间:2012-11-20 15:30:08

标签: php templates smarty assign

在一个聪明的模板中,我调用用户定义的函数,作为这样的修饰符:

{"myArray"|assignArray}

我在PHP中的用户定义函数看起来像:

function smarty_modifier_assignArray($str)
{
  global $smarty;
  if ($str=="myArray") 
  {
    // it is not constant in real, but comes from a mysql query
    $all = array( array("foo","joe")), array("green", "blue"));
    $smarty->assign($str,$all);
  }
  return null;
}

我的目的是从mysql加载“myArray”是昂贵的,如果我的模板不需要那么 数组,我不想加载它。我的模板如下:

{"myArray"|assignArray}
{foreach from=$myArray item=r}
  {$r[0]}
{/foreach}

问题是,在foreach中我看不到$ myArray(或者它是空的)。我在智能论坛(v3.x,http://www.smarty.net/forums/viewtopic.php?p=77671)中读到,为了加速优化,变量被复制到模板空间,因此在启动模板后,无法将新变量分配给模板空间。可悲的是,这似乎是真的。我想使用模板{assign ...}我仍然可以这样做,但我无法在{assign ...}中生成动态多级数组:(

我该怎么办?有什么想法吗?

1 个答案:

答案 0 :(得分:2)

你可以在渲染时分配smarty多级数组, 使用{assign}标签。

语法,

{assign var=foo value=[1,[9,8],3]}   // can be nested