模板函数bug修复说明

浏览:328 发布日期:2011/10/17
- 普通 - 未处理
今天使用函数模板时,发现一个bug,经过查看源码,修改了此项bug。具体如下:

学校名称:
{$vo.school_id|showdbselect='school'}*


班级:
{[color=red]$vo.class_id|showdbselect='class',' where school_id='.$vo["school_id"]}<
font color="#FF0000">*
[/color]
如上,我的函数showdbselect($id,$name,$where),调用后无法成功。具体函数解析程序如下:
public function parseVarFunction($name,$varArray){
//对变量使用函数
$length = count($varArray);
//取得模板禁止使用函数列表
$template_deny_funs = explode(',',C('TMPL_DENY_FUNC_LIST'));
for($i=0;$i<$length ;$i++ ){
if (0===stripos($varArray[$i],'default='))
$args = explode('=',$varArray[$i],2);
else
[color=red] $args = explode('=',$varArray[$i]);
//模板函数过滤
$args[0] = trim($args[0]);
switch(strtolower($args[0])) {
case 'default': // 特殊模板函数
$name = '('.$name.')?('.$name.'):'.$args[1];
break;
default: // 通用模板函数
if(!in_array($args[0],$template_deny_funs)){
if(isset($args[1])){
if(strstr($args[1],'###')){
$args[1] = str_replace('###',$name,$args[1]);
$name = "$args[0]($args[1])";
}else{
$name = "$args[0]($name,$args[1])";
}
}else if(!empty($args[0])){
$name = "$args[0]($name)";
}
}
}
}
return $name;
}[/color]
[/color]
[color=black]经过分析,上面红色部分,主要是对参数使用'='来分组读取,我的参数中有'=',所以无法正常解析,现修改为:

$args = explode('=',$varArray[$i],2);
问题解决了,上面修改成为第一个进行分组,以后不再分组。
另外如果在函数模板中传递参数的话,需要使用.$vo["school_id"],不可以使用$vo.school_id.

评论(
后面还有条评论,点击查看>>