2012-11-20 45 views
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 ...}我仍然可以這樣做,但是我無法生成動態多級數組到{賦值...} :(

我應該怎麼做?任何想法?

回答

2

您可以在渲染分配Smarty的多級陣列, 使用{}指定標籤。

語法,

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