logo    奶牛CMS内容管理系统    最灵活的企业级免费开源电子商务系统软件!
首页 > 新闻列表 > 模型自动完成,callback回调函数建议

模型自动完成,callback回调函数建议

今天写一个模型,需要用到自动完成功能。
众所周知,在create创建数据操作时,会自动验证,然后会自动完成。
自动完成只需要在模型中定义一个$_auto的数组,具体手册里有就不再罗嗦。
$_auto=array(
array('keywords','parsedata',3,'callback')
);
这里定义了一个自动完成规则,对keywords字段调用模型类中的parsedata方法,将返回值填充到keywords字段。
一般情况下,默认调用回调函数的时候,会将keywords默认值当作第一个参数传去进:
function parsedata($data){
...

return $data;//处理过的data
}
这里的$data就是keywords字段默认的值,从表单中传过来的,如果表单中没有,那么这个值就是空的,$data经过parsedata处理后,返回给keywords,作为最终结果用于写入数据库。
那么现在我们有多个字段需要自动完成
$_auto=array(
array('keywords','fillkeywords',3,'callback'),
array('descriptions','filldescriptions',3,'callback'),
);
function fillkeywords($data){
...
}
function filldescriptions($data){
...
}
我们需要分别定义两个回调函数,某些情况下感觉不是很好。

根据手册里写的,一个规则也只有4个参数,只能定义多个回调函数。

老衲觉得不应该这样,就去看了下model.class.php里关于自动完成部分的代码,发现其实自动完成有第五个参数
这个参数是定义除了默认$data以外的其他函数参数,它是一个数组类型
$_auto=array(
array('keywords','autofill',3,'callback',array('arg1','arg2')),

);
这样,我们autofill函数可以这样写
function autofill($data,$arg1,$arg2){
...
}
总之,autofill第一个参数必须是字段默认值,后面的参数是根据auto规则第五个参数按顺序来的。
这样我们不必定义多个回调函数,我是这么做的
$_auto=array(
array('keywords','autofill',3,'callback','keywords'),
array('descriptions','autofill',3,'callback','description'),
);
注:如果第五个参数是字符串,它将被强制转换成数组类型,当然只包含一个元素
function autofill($data,$field){
$return="";
switch($field){
case "keywords":
//处理keywords字段
$return = ……;//此处过程省略
break;
case "description":
//处理description
$return = ..;//此处过程省略
break;
default:
}
return $return;
}

联系我们
点击这里给我发消息
点击这里给我发消息
联系我们