此文转载至DREAM IN THE DISTANCE的百度空间,感谢他给我带来对这个功能的理解:
动态注册模板函数插件,前两个参数是模板函数名称和执行函数名称。
原文如下:
在smarty 模板中如果根据传递参数不同而在页面中显示不同的内容呢,这要用到register_function()函数。简单研究了一下,了解了它的基本的用法。
测试代码如下:
Test.php
<?php
require '../common/config_smarty.php';
function shows($params){
extract($params);
if($p1==1){
return ' this is one,'.$name;
}else{
return ' this is not one,'.$name;
}
//$smarty->assign();
}
$smarty->register_function('shows',"shows");
$smarty->display('test.tpl');
?>
Test.tpl
{[shows p1=1 name="jice"]}<br>
{[shows p1=2 name="test"]}
输出结果:
this is one,jice
this is not one,test
我们在test.php 文件中定义了一个shows($params)的方法,有一个$params的参数。注意:在模板中调用shows的方法的时候,传过来的参数是一个数组。所以在这里要用extract()方法,它是把数组中的变量导入到当前的符号表,并将键名做为变量名,健值做为变量值。比如有这样的一个数组。$test=array(“var1”=>”var1_value”, “var2”=>”var2_value”); extract($test);变量var1,var2的值分别为var1_value,var2_value。同样的,如果不用extract()方法,则用$params[‘p1’], $params[‘name’]同样可以取到值。调用register_function()的方法,注册一个函数名。在模板文件中,直接调用 {[shows p1=1 name="jice"]}就可以根据传递的参数不同返回不同的值了。
测试代码如下:
Test.php
<?php
require '../common/config_smarty.php';
function shows($params){
extract($params);
if($p1==1){
return ' this is one,'.$name;
}else{
return ' this is not one,'.$name;
}
//$smarty->assign();
}
$smarty->register_function('shows',"shows");
$smarty->display('test.tpl');
?>
Test.tpl
{[shows p1=1 name="jice"]}<br>
{[shows p1=2 name="test"]}
输出结果:
this is one,jice
this is not one,test
我们在test.php 文件中定义了一个shows($params)的方法,有一个$params的参数。注意:在模板中调用shows的方法的时候,传过来的参数是一个数组。所以在这里要用extract()方法,它是把数组中的变量导入到当前的符号表,并将键名做为变量名,健值做为变量值。比如有这样的一个数组。$test=array(“var1”=>”var1_value”, “var2”=>”var2_value”); extract($test);变量var1,var2的值分别为var1_value,var2_value。同样的,如果不用extract()方法,则用$params[‘p1’], $params[‘name’]同样可以取到值。调用register_function()的方法,注册一个函数名。在模板文件中,直接调用 {[shows p1=1 name="jice"]}就可以根据传递的参数不同返回不同的值了。
看过之后,我的总结:
在模板中,用shows,调用函数shows 同时传入一个数组 p1=1,name=“jice” 对应的是函数的参数,$params
用extract()的方法可以把数组转化成变量,键名是变量名,键值是变量值。
adodb+smarty分页原理中的相关代码:
function unhtml($params)
{
extract($params);
$text=$content;
global $usefun;
return $usefun->UnHtml($text);
}
{
extract($params);
$text=$content;
global $usefun;
return $usefun->UnHtml($text);
}
$smarty->register_function("unhtml","unhtml");
和
{unhtml content=$arraybbs[bbsid].bookname}
模板文件里调用了unhtml这个模板函数名称,并且传入一个数组,这个数组的键名是content,键值是$arraybbs[bbsid].bookname。通过extract转化成变量的形式。函数最后返回的结果是调用UnHtml()这个函数处理文本后的结果
我的百度博客链接:
http://hi.baidu.com/wenzi_belong_/home