0

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

{"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 (或者它是空的)。我在 smarty 论坛(v3.x,http ://www.smarty.net/forums/viewtopic.php?p=77671 )中读到,为了优化速度,变量被复制到模板空间,所以在启动模板后,不能为其分配新变量。可悲的是,这似乎是真的。我想使用模板 {assign ...} 我仍然可以这样做,但是我无法在该 {assign ...} 中生成动态多级数组:(

我应该怎么办?有任何想法吗?

4

1 回答 1

2

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

句法,

{assign var=foo value=[1,[9,8],3]}   // can be nested
于 2016-12-08T06:51:07.690 回答