Вызов функции в шаблоне: отправка параметров с асс. массив вместо пар аргумент / значение - PullRequest
1 голос
/ 19 декабря 2011

С Smarty 3.0 я бы хотел, чтобы избежать повторения кода:

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

вместо

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

Я нашел {call} но это не совсем то, что я ищу.

Я попытаюсь сделать это сам, но я открыт для предложений (или даже фрагмента кода для копирования / вставки :-p)

1 Ответ

2 голосов
/ 19 декабря 2011

Вы можете создать функцию-оболочку с именем unroll_parameters, определенную как показано ниже.

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

Это позволит вам использовать следующее:

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

Если вы хотите получить доступ к $smarty внутри вызываемой функции, добавьте значение к $params['args'] перед вызовом call_user_func_array.

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

Примечание. Если объявление функции имеет вид: function foo ($var1,$var2, ..., $smarty)

...