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); } ?>