0
在Smarty的模板,我稱之爲一個用戶定義的函數指定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 ...}我仍然可以這樣做,但是我無法生成動態多級數組到{賦值...} :(
我應該怎麼做?任何想法?