2011-12-19 21 views
1

使用Smarty 3.0,我想這樣做,以避免重複代碼:的在模板中調用函數:使用assoc發送參數。數組,而不是參數/值對

{$assocArray = ['param1' => 'value1', 'param2' => 'value2', ...]} 
{magicFunction name='someHelper' params=$assocArray} 

代替

{$assocArray = ['param1' => 'value1', 'param2' => 'value2', ...]} 
{someHelper param1=$assocArray['value1'] param2=$assocArray['value2'] ...} 

我發現{call}但不正是我正在尋找的東西。

我會盡力做我自己,但我願意接受建議(甚至是一段代碼,複製/粘貼:-P)

回答

2

您可以創建一個名爲unroll_parameters包裝函數定義如下。

function unroll_params ($params, &$smarty) { 
    return call_user_func_array ($params['name'], $params['args']); 
} 

這將使你能夠使用下列內容:

{unroll_params name='someFunction' args=$assocArray} 

如果你想打電話call_user_func_array之前訪問$smarty調用函數裏面,附加價值$params['args']

return call_user_func_array (
    $params['name'], array_merge ($params['args'], array ($smarty)) 
); 

注:如果函數的聲明是這樣的:function foo ($var1,$var2, ..., $smarty)

+0

只是爲了信息,我已經結束了的東西,如'回報call_user_func_array($ PARAMS [ '名'],數組($ PARAMS ['args'],$ smarty));'。感謝您的傑出答案。 – 2011-12-19 15:33:04

+0

@FrostyZ當$ params ['args] = array(1,2)'和'$ smart = 3;'時,相當於'func(array(1,2),3)',那真的是你正在找? – 2011-12-19 15:45:45

+0

@FrostyZ查看我的帖子的編輯。 – 2011-12-19 15:47:37

相關問題