抛砖引玉系列 -- 编写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]]
例如
{$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
相关阅读 更多
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28