void smarty_function_name( |
$params, | |
&$smarty); |
array $params;object &$smarty;
Все атрибуты, передаваемые в функции шаблона из самого шаблона,
хранятся в $params в виде ассоциативного массива.
Получить доступ к его значениям можно напрямую:
$params['start'] или используя
extract($params) для импорта в таблицу.
Вывод (возвращаемое значение) функции будет подставлен в место расположения
тэга функции в шаблоне (функция fetch например).
В качестве альтернативы, функция может выполнять какие либо действия
без какого-либо вывода (assign функция).
Если функция должна присвоить(assign) значения некоторым переменным в шаблоне или
использовать иные возможности Smarty, то можно работать с объектом
$smarty как обычно.
См. также: register_function(), unregister_function().
Example 16.1. Функция-плагин с выводом
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: function.eightball.php
* Type: function
* Name: eightball
* Purpose: outputs a random magic answer
* -------------------------------------------------------------
*/
function smarty_function_eightball($params, &$smarty)
{
$answers = array('Да',
'Нет',
'Никоим образом',
'Перспектива так себе...',
'Спросите позже',
'Все может быть');
$result = array_rand($answers);
return $answers[$result];
}
?>
которая может быть использована в шаблоне следующим образом:
Вопрос: Мы когда-нибудь найдем время для отпуска?
Ответ: {eightball}.
Example 16.2. Функция-плагин без вывода
<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File: function.assign.php
* Type: function
* Name: assign
* Purpose: assign a value to a template variable
* -------------------------------------------------------------
*/
function smarty_function_assign($params, &$smarty)
{
extract($params);
if (empty($var)) {
$smarty->trigger_error("assign: missing 'var' parameter");
return;
}
if (!in_array('value', array_keys($params))) {
$smarty->trigger_error("assign: missing 'value' parameter");
return;
}
$smarty->assign($var, $value);
}
?>