
在后台设定一个自定义字段,类型是下拉框,关联了数据表。
前端显示结果:

显然不是我们所需要的。处理方法如下:
要修改的文件:application/common/fun/Field.php
要修改的方法:list_filter
3.添加代码:
![`X%X4ZIBSSC]OMX])D$_}VP.png](https://x1.php168.com/public/uploads/images/20240824/1295_20240824200504f59b2.png)
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.记着锁定下文件,防止更新覆盖。