dqzve68846 2012-11-20 15:30
浏览 48

在模板时间内分配smarty变量

In a smarty template I call a user defined function, as a modifier like that:

{"myArray"|assignArray}

my user defined function in php looks as:

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;
}

My purpose is that loading "myArray" from mysql is expensive, and if my template do not need that array, I don't want to load it. My template follows as:

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

The problem is, that in the foreach I can't see $myArray (or it is empty). I read in the smarty forum (v3.x, http://www.smarty.net/forums/viewtopic.php?p=77671 ) that for speed optimalization the variables are copied to the template space, so after starting a template, one can not assign new variables onto that. Sadly it seems true. I suppose using template {assign ...} I still could do that, but I was not able to generate dynamical multi-level arrays into that {assign ...} :(

What should I do? Any ideas?

  • 写回答

1条回答 默认 最新

  • duangu1868 2016-12-08 06:51
    关注

    You can assign smarty multilevel array while rendering, use {assign} tag for it.

    Syntax,

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

报告相同问题?

悬赏问题

  • ¥15 delphi webbrowser组件网页下拉菜单自动选择问题
  • ¥15 wpf界面一直接收PLC给过来的信号,导致UI界面操作起来会卡顿
  • ¥15 init i2c:2 freq:100000[MAIXPY]: find ov2640[MAIXPY]: find ov sensor是main文件哪里有问题吗
  • ¥15 运动想象脑电信号数据集.vhdr
  • ¥15 三因素重复测量数据R语句编写,不存在交互作用
  • ¥15 微信会员卡等级和折扣规则
  • ¥15 微信公众平台自制会员卡可以通过收款码收款码收款进行自动积分吗
  • ¥15 随身WiFi网络灯亮但是没有网络,如何解决?
  • ¥15 gdf格式的脑电数据如何处理matlab
  • ¥20 重新写的代码替换了之后运行hbuliderx就这样了