在smarty中调用php内置函数的方法
相信有很多朋友还不知道,可以在smarty模板里调用php的内置函数,我们一起来看看它的用法。 模板书写: {'param1'|functionName:'param2':'param3'} php函数原型: echo functionName('param1','param2','param3'); 实例: {'1234567'|substr:'1':'2'} 下面这个和函数的参数顺序有关系{'a'|str_replace:'A':'abcd'}直接延伸到,直接在php中写一个函数调用,不需要注册修改器的.更深一步的研究:发现数组会出错.分配了一个数组array给Smarty,假设Smarty的分界符为'{' 和'}'。 在很多资料上都看到,在Smarty中要求数组的长度时,可以用在数组后便加|count的方法调用。即通过{array|count}获得 array的长度。但是今天在写模板时,发现这样得不到数组的长度,而只是得到一个返回的字符串Array。也就是说仅仅是返回了{array}的结果, 而没有返回其array的长度。 后来通过网络上的资料,发现可以在count前面加@,从而正确的获取数组的长度。再进一步查看Smarty的源码,发现Smarty对属性调节器后边的 方法名进行处理时,会对前边加@的进行特殊处理。因此作出判断:在Smarty中的属性调节器中调用php中定义好的函数时,可以通过加@来表示。 对于在smarty中调用复杂的php函数不予鼓励,因为Smarty的本意就是要实现代码和模板分离,不要偏离了人家的设计初衷。模板书写: 函数如下 代码如下: function SmartyLen($params){
extract($params); $len=strlen($text); $max=$length; for ($i=0;$i<$length;$i++){ $chr=substr($text,$i,1); if(ord($chr)>0x80)//字符是中文 { $length++; $i++; $len--; } } $str=substr($text,$length); if($len>$max)$str.="..."; Return $str; } 注册函数$smarty->register_function('len',"SmartyLen");
模板调用{len text="测试下" length="1"} //注意这里的text和length其实是函数里的2个参数函数的参数必须要以函数内部变量名一致,其实传回去的的是个数组,在函数里用extract($params);把数组中的变量导入到当前的符号表。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |