テンプレート関数プラグイン

void smarty_function_name (array $params, object &$smarty)

テンプレートからテンプレート関数に渡された全ての属性は、連想配列として$paramsに格納されます。

関数の出力(戻り値)はテンプレート関数のタグの部分と置き換えられます(例:fetch()関数)。 あるいは何も出力せずに単に他のタスクを実行する事ができます(例: assign()関数)。

関数によっていくつかの変数をテンプレートに割り当てる必要がある、もしくはSmartyに提供された他の機能を使う必要がある場合は、提供された$smartyオブジェクトを使用する事ができます。

詳細は、 register_function(), unregister_function()を参照して下さい。

例 15-1. 出力ありのテンプレート関数プラグイン

<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File:     function.eightball.php
* Type:     function
* Name:     eightball
* Purpose:  ランダムに回答を出力する
* -------------------------------------------------------------
*/
function smarty_function_eightball($params, &$smarty)
{
    
$answers = array('Yes',
                     
'No',
                     
'No way',
                     
'Outlook not so good',
                     
'Ask again soon',
                     
'Maybe in your reality');

    
$result = array_rand($answers);
    return
$answers[$result];
}
?>

次のようにテンプレートで使用する事ができます。

Question: Will we ever have time travel?
Answer: {eightball}.

例 15-2. 出力なしのテンプレート関数プラグイン

<?php
/*
* Smarty plugin
* -------------------------------------------------------------
* File:     function.assign.php
* Type:     function
* Name:     assign
* Purpose:  テンプート変数に値を割り当てる
* -------------------------------------------------------------
*/
function smarty_function_assign($params, &$smarty)
{
    if (empty(
$params['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($params['var'], $params['value']);
}
?>