在一个聪明的模板中,我调用用户定义的函数,作为这样的修饰符:
{"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 ...}中生成动态多级数组:(
我该怎么办?有什么想法吗?
答案 0 :(得分:2)
你可以在渲染时分配smarty多级数组, 使用{assign}标签。
语法,
{assign var=foo value=[1,[9,8],3]} // can be nested