这是smarty的两个比较常用的自定义函数的方法。
这里面设计了两个文件,一个是模板文件:testfunction.html
另外一个可以称之为控制器文件:functioncontroller.php
其中模板文件我是这样写的:
<h1>测试function</h1>
<{jjyfunction name="hello,my girl!" size="5"}>
<h1>测试block</h1>
<{jjyblock size="5"}>
i an a boy
<{/jjyblock}>
控制器文件我是这样写的:
require_once('./smarty/Smarty.class.php');
$smarty = new Smarty();
$smarty->left_delimiter="<{";
$smarty->right_delimiter="}>";
function circleFunction($args)
{
$str = "";
for($i=0;$i<$args['size'];$i++)
{
$str .= "<h3>".$args['name']."</h3>"."<br/>";
}
return $str;
}
$smarty->registerPlugin("function","jjyfunction","circleFunction");
function circleBlock($args,$content)
{
$str = "";
for($i=0;$i<$args['size'];$i++)
{
$str .= "<h3>".$content."</h3>"."<br/>";
}
return $str;
}
$smarty->registerPlugin("block","jjyblock","circleBlock");
$smarty->display('testfunction.html');
?>
其中需要说明的一点,原来注册函数直接用register_function 和 register_block两个函数。
后来随着php的升级,把这类的函数直接合成了,直接用registerPlugin,后面加上三个参数。其中第一个参数生命是block,function,cache等。
下面说说怎么去自定义一个插件。我们写的函数比较多的话,一直去register显得比较麻烦,一般的处理方法,把比较常用的函数,封装起来写成插件的形式。插件有很多种,我们在这就学一种function,当然了他也是自定义函数的一种。
首先我们要明确插件的位置,需要把写的插件放到smarty模板种的plugins文件夹种,而且他的命名也是定死的。
比如我们自定义一个jijunyuan的插件:命名为function.jijunyuan.php的一个文件
下面看代码:
文件中的代码:
<?php
function smarty_function_jijunyuan($params,&$smarty)
{
$str = "";
for($i=0;$i<$params['size'];$i++)
{
$str .= "<h3>".$params['name']."</h3>"."<br/>";
}
return $str;
}
?>
注意这个函数名字规范也是定死的:smarty_function_jijunyuan。注意后面这个jijunyuan必须和你规定的这个文件名的jijunyuan保持一致。
下面看看如何使用这个插件,看代码:
<{jjyfunction name="hello,my girl!" size="5"}>
使用起来和自定义的函数没什么两样。
ok,今天学到这。