输出过滤器

    一旦通过display()fetch()调用一个模板,其输出可以被送往一个或多个输出过滤器。这个和后过滤器的不同在于,后过滤器操作的是一个编译过的模板,并在编译后的模板保存到磁盘之前;而输出过滤器在模板执行时才开始对模板进行操作。

    输出过滤器可以被注册,或者从插件目录中用load_filter()函数调入,或者设置$autoload_filters变量而调用。Smarty将模板输出作为第一个参数传递,并期望函数返回处理后的结果。

例子15-4. 使用模板输出过滤器

<?php
function protect_email($tpl_output, &$smarty)
{
    
$tpl_output =
       
preg_replace('!(\S+)@([a-zA-Z0-9\.\-]+\.([a-zA-Z]{2,3}|[0-9]{1,3}))!',
                    
'$1%40$2'$tpl_output);
    return 
$tpl_output;
}

// 注册输出过滤器
$smarty->register_outputfilter('protect_email');
$smarty->display('index.tpl');

// 现在,模板输出中所有的Email地址都加以
// 简单保护以防止探测
?>

    参见register_outpurfilter()load_filter()$autoload_filters后过滤器以及$plugins_dir