【问题标题】:Assign smarty variable during template time在模板时间分配 smarty 变量
【发布时间】:2012-11-08 17:11:15
【问题描述】:

在一个 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 ...} 中生成动态多级数组:(

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

【问题讨论】:

    标签: php templates smarty assign


    【解决方案1】:

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

    语法,

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-17
      • 2015-03-20
      • 2020-12-20
      相关资源
      最近更新 更多