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


Posted in PHP onFebruary 07, 2013

相信有很多朋友还不知道,可以在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将任何格式视频转为flv的代码
Sep 03 PHP
支持数组的ADDSLASHES的php函数
Feb 16 PHP
PHP中英混合字符串截取函数代码
Jul 17 PHP
php 判断数组是几维数组
Mar 20 PHP
PHP获取网页标题的3种实现方法代码实例
Apr 11 PHP
11个PHPer必须要了解的编程规范
Sep 22 PHP
Yii框架form表单用法实例
Dec 04 PHP
PHP与Java对比学习日期时间函数
Jul 03 PHP
Yii2数据库操作常用方法小结
May 04 PHP
PHP自定义函数判断是否为Get、Post及Ajax提交的方法
Jul 27 PHP
PhpStorm本地断点调试的方法步骤
May 21 PHP
Laravel 自动转换长整型雪花 ID 为字符串的实现
Oct 27 PHP
php字符串分割函数explode的实例代码
Feb 07 #PHP
php中使用preg_replace函数匹配图片并加上链接的方法
Feb 06 #PHP
php截取字符串并保留完整xml标签的函数代码
Feb 06 #PHP
php中存储用户ID和密码到mysql数据库的方法
Feb 06 #PHP
php中使用__autoload()自动加载未定义类的实现代码
Feb 06 #PHP
php中使用preg_match_all匹配文章中的图片
Feb 06 #PHP
php中使用addslashes函数报错问题的解决方法
Feb 06 #PHP
You might like
关于PHP的相似度计算函数:levenshtein的使用介绍
2013/04/15 PHP
PHP经典实用正则表达式小结
2017/05/04 PHP
PHP+jQuery实现随意拖动层并即时保存拖动位置
2015/04/30 Javascript
jquery实现适用于门户站的导航下拉菜单效果代码
2015/08/24 Javascript
jQuery改变form表单的action,并进行提交的实现代码
2016/05/25 Javascript
AngularJS入门教程之XHR和依赖注入详解
2016/08/18 Javascript
JS实现HTML标签转义及反转义
2020/04/14 Javascript
JavaScript编写一个贪吃蛇游戏
2017/03/09 Javascript
nginx配置React静态页面的方法教程
2017/11/03 Javascript
NodeJS搭建HTTP服务器的实现步骤
2018/10/12 NodeJs
react脚手架如何配置less和ant按需加载的方法步骤
2018/11/28 Javascript
javascript关于“时间”的一次探索
2019/07/24 Javascript
微信小程序事件 bindtap bindinput代码实例
2019/08/26 Javascript
使用Layui搭建后台管理界面的操作方法
2019/09/20 Javascript
Python编程求解二叉树中和为某一值的路径代码示例
2018/01/04 Python
pandas系列之DataFrame 行列数据筛选实例
2018/04/12 Python
python 监听salt job状态,并任务数据推送到redis中的方法
2019/01/14 Python
python numpy存取文件的方式
2020/04/01 Python
浅析python实现动态规划背包问题
2020/12/31 Python
利用CSS3参考手册和CSS3代码生成工具加速来学习网页制
2012/07/11 HTML / CSS
CSS3中新增的对文本和字体的设置
2020/02/03 HTML / CSS
HTML5 移动页面自适应手机屏幕四类方法总结
2017/08/17 HTML / CSS
Julep官网:美容产品和指甲油
2017/02/25 全球购物
介绍一下.NET构架下remoting和webservice
2014/05/08 面试题
通信工程毕业生求职信
2013/11/16 职场文书
《理想》教学反思
2014/02/17 职场文书
社区学习雷锋活动总结
2014/04/25 职场文书
车间安全生产标语
2014/06/06 职场文书
企业环保标语
2014/06/10 职场文书
应届毕业生自荐书
2014/06/18 职场文书
班级学雷锋活动总结
2014/06/26 职场文书
学习普通话的体会
2014/11/07 职场文书
2015年端午节活动策划书
2015/05/05 职场文书
技术转让协议书
2016/03/19 职场文书
oracle通过存储过程上传list保存功能
2021/05/12 Oracle
Redis Stream类型的使用详解
2021/11/11 Redis