phpcms筛选字段增加多选情况

网上搜到的教程,基本都是搜索单选字段的,所以并没有处理多选的情况,改造方式为:找到structure_filters_sql方法:
原始的代码是:
  1. function structure_filters_sql($modelid) {   
  2.     $sql = $fieldname = $min = $max = '';   
  3.     $fieldvalue = array();   
  4.     $modelid = intval($modelid);   
  5.     $model =  getcache('model','commons');   
  6.     $fields = getcache('model_field_'.$modelid,'model');   
  7.     $fields_key = array_keys($fields);   
  8.     //TODO   
  9.     $sql = '`status` = '99'';   
  10.     foreach ($_GET as $k=>$r) {   
  11.         if(in_array($k,$fields_key) && intval($r)!=0 && ($fields[$k]['filtertype'] || $fields[$k]['rangetype'])) {   
  12.             if($fields[$k]['formtype'] == 'linkage') {   
  13.                 $datas = getcache($fields[$k]['linkageid'],'linkage');   
  14.                 $infos = $datas['data'];   
  15.                 if($infos[$r]['arrchildid']) {   
  16.                     $sql .=  ' AND `'.$k.'` in('.$infos[$r]['arrchildid'].')';   
  17.                 }   
  18.             } elseif($fields[$k]['rangetype']) {   
  19.                 if(is_numeric($r)) {   
  20.                     $sql .=" AND `$k` = '$r'";   
  21.                 } else {   
  22.                     $fieldvalue = explode('_',$r);   
  23.                     $min = intval($fieldvalue[0]);   
  24.                     $max = $fieldvalue[1] ? intval($fieldvalue[1]) : 999999;   
  25.                     $sql .=" AND `$k` >= '$min' AND  `$k` < '$max'";   
  26.                 }   
  27.             } else {   
  28.                 $sql .=" AND `$k` = '$r'";   
  29.             }   
  30.         }   
  31.     }   
  32.     return $sql;   
  33. }   
改成:
  1. function structure_filters_sql($modelid) {   
  2.     $sql = $fieldname = $min = $max = '';   
  3.     $fieldvalue = array();   
  4.     $modelid = intval($modelid);   
  5.     $model =  getcache('model','commons');   
  6.     $fields = getcache('model_field_'.$modelid,'model');   
  7.     $fields_key = array_keys($fields);   
  8.     //TODO   
  9.     $sql = '`status` = '99'';   
  10.     foreach ($_GET as $k=>$r) {   
  11.         if(in_array($k,$fields_key) && intval($r)!=0 && ($fields[$k]['filtertype'] || $fields[$k]['rangetype'])) { 
  12.             if($fields[$k]['formtype'] == 'linkage') {   
  13.                 $datas = getcache($fields[$k]['linkageid'],'linkage');   
  14.                 $infos = $datas['data'];   
  15.                 if($infos[$r]['arrchildid']) {   
  16.                     $sql .=  ' AND `'.$k.'` in('.$infos[$r]['arrchildid'].')';   
  17.                 }   
  18.             } elseif($fields[$k]['rangetype']) {   
  19.                 if(is_numeric($r)) {   
  20.                     $sql .=" AND `$k` = '$r'";   
  21.                 } else {   
  22.                     $fieldvalue = explode('_',$r);   
  23.                     $min = intval($fieldvalue[0]);   
  24.                     $max = $fieldvalue[1] ? intval($fieldvalue[1]) : 999999;   
  25.                     $sql .=" AND `$k` >= '$min' AND  `$k` < '$max'";   
  26.                 }   
  27.             }elseif($fields[$k]['boxtype']=='checkbox' || $fields[$k]['boxtype']=='multiple') { 
  28.                 $r = ','.trim($r,',').','; 
  29.                 $sql .=" AND `$k` LIKE '%$r%'";   
  30.             } else {   
  31.                 $sql .=" AND `$k` = '$r'";   
  32.             }   
  33.         }   
  34.     }   
  35.     return $sql;   
  36. }   
代码中红字部分即为新增代码





联系我们

在线咨询:点击这里给我发消息

邮件:w420220301@qq.com