在smarty中调用php内置函数的方法

2015-01-24信息快讯网

在smarty中调用php的内置函数,相信很多人都不是很很了解smarty的一个重要功能,就是能在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的长度。
查看smarty\plugins文件夹,发现并没有count的相关方法,也就是说,count是直接调用了php中的方法。

后来通过网络上的资料,发现可以在count前面加@,从而正确的获取数组的长度。再进一步查看Smarty的源码,发现Smarty对属性调节器后边的 方法名进行处理时,会对前边加@的进行特殊处理。因此作出判断:在Smarty中的属性调节器中调用php中定义好的函数时,可以通过加@来表示。
1、对类型为数组的方法进行测试时,发现不加@符号都会出错。比如:要对一个数组调用count方法求出数组的长度,就可以这样调用{array|@count},而要对数组调用end方法得出数组的最后一组数据时,则可以通过{array|@end}。
2、在对字符串的相关函数进行测试,发现加不加@都可以正常的调用。
3、其他的尚未认真测试。

对于在smarty中调用复杂的php函数不予鼓励,因为Smarty的本意就是要实现代码和模板分离,不要偏离了人家的设计初衷。

模板书写:
{'param1'|functionName:'param2':'param3'}

php函数原型:
echo functionName('param1','param2','param3');

实例:
{'1234567'|substr:'1':'2'}
下面这个比较怪 和函数的参数顺序有关系
{'a'|str_replace:'A':'abcd'}

Smarty调用自定义函数
调用自定义函数需要用到register_function() 来注册
这里为大家举个例子,常见的字符串切割

函数如下

<?php
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,0,$length);
if($len>$max)$str.="...";
Return $str;
} 

注册函数
$smarty->register_function('len',"SmartyLen");

模板调用
{len text="测试下" length="1"} //注意这里的text和length其实是函数里的2个参数函数的参数必须要以函数内部变量名一致,其实传回去的的是个数组,在函数里用extract($params);把数组中的变量导入到当前的符号表。

解析php中如何调用用户自定义函数
php number_format() 函数通过千位分组来格式化数字的实现代码
注意:php5.4删除了session_unregister函数
浅析51个PHP处理字符串的函数
php中用date函数获取当前时间有误的解决办法
php/js获取客户端mac地址的实现代码
php5.5新数组函数array_column使用
PHP session_start()问题解疑(详细介绍)
如何解决CI框架的Disallowed Key Characters错误提示
解决PHP mysql_query执行超时(Fatal error: Maximum execution time …)
Smarty foreach控制循环次数的实现详解
解析array splice的移除数组中指定键的值,返回一个新的数组
php小经验:解析preg_match与preg_match_all 函数
如何在smarty中增加类似foreach的功能自动加载数据
编写Smarty插件在模板中直接加载数据的详细介绍
关于PHP模板Smarty的初级使用方法以及心得分享
解析smarty 截取字符串函数 truncate的用法介绍
php实现utf-8和GB2312编码相互转换函数代码
php字符串分割函数explode的实例代码
php中使用preg_replace函数匹配图片并加上链接的方法
php截取字符串并保留完整xml标签的函数代码
php中使用preg_match_all匹配文章中的图片
php中使用addslashes函数报错问题的解决方法
php函数array_merge用法一例(合并同类数组)
PHP获取数组中某元素的位置及array_keys函数应用
有关phpmailer的详细介绍及使用方法
用PHP即时捕捉PHP中的错误并发送email通知的实现代码
mysqli_set_charset和SET NAMES使用抉择及优劣分析
PHP中header和session_start前不能有输出原因分析
PDO版本问题 Invalid parameter number: no parameters were bound
PHPMailer使用教程(PHPMailer发送邮件实例分析)
屏蔽机器人从你的网站搜取email地址的php代码
Smarty的配置与高级缓存技术分享
smarty巧妙处理iframe中内容页的代码
php使用Smarty的相关注意事项及访问变量的几种方式
php smarty截取中文字符乱码问题?gb2312/utf-8
php Smarty初体验二 获取配置信息
©2014-2024 dbsqp.com