Skip to content

输出过滤器 {/programmers/advanced-features/.outputfilters}

当模板通过 display()fetch() 调用时,其输出可以通过一个或多个输出过滤器发送。这与 postfilters 不同,因为 postfilters 在编译模板保存到磁盘之前操作,而输出过滤器在模板输出执行时操作。

输出过滤器可以通过 注册 或者使用 loadFilter() 方法从 插件目录 加载,或者通过设置 $autoload_filters 变量。Smarty 将模板输出作为第一个参数传递,并期望函数返回处理结果。

    <?php
    // 在你的应用程序中放置这些代码
    function protect_email($tpl_output, Smarty_Internal_Template $template)
    {
        $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->registerFilter("output","protect_email");
    $smarty->display("index.tpl');

    // 现在,模板输出中的任何电子邮件地址都将有一个简单的保护措施防止垃圾邮件机器人
    ?>

参见 registerFilter(), loadFilter(), $autoload_filters, postfilters$plugins_dir.