在使用smarty模板的时候,经常会看到html_options,html_checkboxes等自定义函数,但是这些函数的显示形式,可能并不满足实际开发的需要,或者说,它提供的自定函数比较少,实际开发的时候可能需要更多更强大的函数来支撑。改怎么办?
本文就来简单介绍一下smarty时如何实现这些函数插件的。
smarty注册模板函数插件有两种方式:
一种是通过register手动注册,另种是在plugins文件下创建方法类文件,系统自动注册。
register动态注册有多种形式,不一定只是函数,也可以是块,也可以是修饰器,对象,资源等等。
本文将主要介绍注册块和注册函数。
register动态注册函数插件:
void registerPlugin(string type,string name, mixed callback,bool cacheable,mixed cache_attrs);
第一个参数type可以是function,block,compiler,modifier,就是指明要注册的插件是函数,块,编译器还是修时器。
第二个参数name,你要注册的插件叫什么名字
第三个参数,就是实现的函数的名字
第四个参数,是否设置缓存
注意:smarty3取消了register_function,register_block等方法,改成了registerPlugin()用type参数来指明,要注册的插件的格式。
案例:telValid.php
<?php
require( "./libs/Smarty.class.php");
$smarty=new Smarty();
function telValid($params,&$smarty)
{
if (preg_match("/0\d{2}-\d{8}/",$params['values']))
{
return "电话号码验证成功!";
}
else
{
return "电话号码格式错误!";
}
}
$smarty->registerPlugin("function","telValid", "telValid");
$smarty->display("telValid.html");
?>
telValid.html
<html>
<body>
{telValid values="010-12345678"}
</body>
</html>
以上的的方式,在程序中会有很多的代码,比较混乱。
下面看第二中方式:
在smarty\libs\plugins的文件下有很多的自定义插件,可以在这里自定义。但是这里面的插件已经有很多了,而且找起来也不方便。所以体检大家自定义一个插件包,专门用于存放,你自定的那些插件。
自定义插件的文件命名规范:function.插件名.php;
自定义函数的命名规范:smarty_function_插件名;
函数的参数的规范:两个值,一个是属性的数组,一个是smarty的引用。
案例:
function.tel.php
<?php
function smarty_function_tel($params,$smarty)
{
if (preg_match("/0\d{2}-\d{8}/",$params['values']))
{
return "电话号码验证成功!";
}
else
{
return "电话号码格式错误!";
}
}
?>
tel.php
<?php
define("ROOT",str_replace("\\","/",dirname(__FILE__)).'/');
require ROOT."/libs/Smarty.class.php";
$smarty=new Smarty();
$smarty->addPluginsDir(ROOT."plugins");//添加自定义的插件包
$smarty->display("tel.html");
?>
tel.htm
{tel values="010-12345678"}