+ -
当前位置:首页 → 问答吧 → 抛砖引玉系列 -- 编写smarty 过滤器

抛砖引玉系列 -- 编写smarty 过滤器

时间:2006-07-03

来源:互联网

过滤器是一些短小的函数,这些函数被应用于模版中的一个变量,然后变量再显示或用于其他的一些文档。
例如
{$CustInfo.CustName|escape}中的escape
{$CustInfo.CustName|truncate:20:"..."}中的truncate
都属于过滤器

我们可以使用void register_modifier (string name, mixed impl)在运行时动态注册一个 过滤器
如:$smarty->register_modifier("sslash","stripslashes");

下面我们就可以使用这个名叫sslash的过滤器了{$var|sslash},但前提是,在register_modifier之前必须包含sslash函数的定义

我们还可以将过滤器函数写在.php文件中并将这个文件放在smarty的plugins目录中
文件的命名规则是modifier.modifiername.php
函数名的命名规则是 function smarty_modifier_modifiername(mixed $value, [mixed $param1, ...]) 第一个参数是不可缺少的,他代表了你要修饰的内容。剩余的参数是可选的,它们的有无取决于期望执行哪一种操作。
这种方式的好处是,smarty引擎会在你用到这个过滤器时自动加载过滤器。不用的时候是不会注册的。

接下来我们就写一个字符串截取的过滤器,因为smarty中的字符串截取不能支持unicode字符,我们就写一个支持unicode字符串的过滤器。也方便大家以后使用 :)

在smarty的plugins目录下新建modifier.turncate_unicode.php文件
在文件中定义函数

<?php
/**
* Smarty plugin
* @package Smarty
* @subpackage plugins
*/


/**
* Smarty truncate unicode modifier plugin
*
* Type:     modifier<br>
* Name:     truncate_unicode<br>
* Purpose:  Truncate a unicode string to a certain length if necessary,
*           optionally splitting in the middle of a word, and
*           appending the $etc string.
* @link
* @param string
* @param integer
* @param string
* @return string
*/
function smarty_modifier_truncate_unicode($string, $length = 80, $etc = '...')
{
    if ($length == 0)
        return '';

    if (strlen($string) > $length) {
        $length -= strlen($etc);
        $tmp = '';
        for($i=0; $i<=$length; $i++){
            if(ord(substr($string,$i,1)) > 0xa0){
                $tmp .= substr($string,$i,2);
                $i++;
            }else {
                $tmp .= substr($string,$i,1);
            }
        }
                return $tmp.$etc;
    } else
        return $string;
}

?>

好了。如果我们想在模版中 输出的标题名称最多显示20个字符,超出部分用...替换,就可以这样写了。
{$TitleInfo.Title_NAME|truncate_unicode:20:"..."}

[[i] 本帖最后由 dreamriver 于 2006-7-3 01:37 编辑 [/i]]

作者: dreamriver   发布时间: 2006-07-03

挺好的阿,怎么没人顶一下

作者: tingoooo   发布时间: 2006-10-20

;P 学习了~

作者: edwardhey   发布时间: 2007-05-22

不错,支持

作者: sanler   发布时间: 2007-05-27

热门下载

更多