在后台设定一个自定义字段,类型是下拉框,关联了数据表。
前端显示结果:
显然不是我们所需要的。处理方法如下:
要修改的文件:application/common/fun/Field.php
要修改的方法:list_filter
3.添加代码:
4、完成后的结果
5、完整方法代码:
/** * 获取列表页的筛选字段 * @param number $mid 模型ID */ public function list_filter($mid=0){ $array = \app\common\util\Field_filter::get_field($mid); // 先对取得的字段选择项进行判断,如果关联了数据表,就先读取一下数据 foreach ($array AS $f=>$b){ foreach($b['options'] AS $e=>$s){ if(count($lab=explode('@',$s))>1){ //用@符号分割一下,如果分割出的数组大于1,说明是关联了数据表 //需要对汉字按汉语拼音排序,按查询构造器写不好,就用原生代码查询了。 $sql="select ".$lab[1].",".$b['options'][1]." from qb_".$lab[0]." order by CONVERT(title USING gbk)"; $va = query($sql); foreach($va AS $ids=>$titles){ $vt[$titles[id]]=$titles[title]; //查询到的数组按格式组织保存 } $array[$f]['options']=$vt;//组织好的选项数据赋值给数组,进行下面操作。 } } } foreach ($array AS $name=>$rs){ $url = \app\common\util\Field_filter::make_url($name,$mid); //其它字段的网址检测生成,如果值存在就生成,不存在值,就不生成 $_ar = []; foreach($rs['options'] AS $k=>$v){ if (is_array($v)) { $_ar[] = [ 'key'=>$v[0], 'title'=>$k, 'url'=> $url . $name . '_1=' . $v[0] . '&' . $name . '_2=' . $v[1] . '&' . $name . '=' . $v[0], ]; }else{ $_ar[] = [ 'key'=>$k, 'title'=>$v, 'url'=> $url . $name . '=' . $k, ]; } } $rs['opt'] = $_ar; $rs['opt_url'] = $url; $array[$name] = $rs; } return $array; }
6.记着锁定下文件,防止更新覆盖。