QQ咨询 官方微信

添加微信好友

官方小程序

百度小程序

微信小程序

头条小程序

关于我们

PHPCMS

phpcms筛选范围不支持浮点型和0开头的范围的bug修复

 admin  2018-07-02 11:04:10
网上所有关于phpcms v9筛选的教程几乎都是一样的,是在phpcms\libs\functions下的extention.func.php添加一些列的筛选函数,但是这些筛选函数都有一个共同的问题,那就是不支持小说点的筛选比如0.1,不支持0开头的范围筛选比如0_10。

原因就是筛选函数在处理数字的时候都统一使用了intval函数,那么这样一来intval(0.1) = 0,inval(0_10) = 0,这样都会被判断成0而造成各种问题。修复方法如下

(1)修改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) && floatval($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]['formtype'] == 'box') { 
  19.                  $sql .=" AND  find_in_set($r,$k)";  
  20.             }  
  21.             //elseif($fields[$k]['boxtype']=='checkbox' || $fields[$k]['boxtype']=='multiple') { 
  22.    // $sql .=  " AND `$k` LIKE '%,$r,%'"; 
  23. //} 
  24.             elseif($fields[$k]['rangetype']) { 
  25.                 if(is_numeric($r)) { 
  26.                     $sql .=" AND `$k` = '$r'"
  27.                 } else { 
  28.                     $fieldvalue = explode('_',$r); 
  29.                     $min = floatval($fieldvalue[0])
  30.                     $max = $fieldvalue[1] ? floatval($fieldvalue[1]) : 999999;               
  31.                     $sql .=" AND `$k` >= '$min' AND  `$k` < '$max'"
  32.                 } 
  33.             } else {     
  34.                 $sql .=" AND `$k` = '$r'"
  35.             } 
  36.         } 
  37.     }        
  38.     return $sql; 
代码中加粗甲红的表示修改过的代码

(2)修改不支持0开头的数字筛选

上面代码第11行的代码有个 floatval($r)!=0官方默认的是intval($r)!=0,这两天都硕说明了如果范围是0_100 这种都会被转化成0  而不满足筛选条件,所以只需要去掉这个判断即可,改成:
  1. if(in_array($k,$fields_key) && ($fields[$k]['filtertype'] || $fields[$k]['rangetype'])) { 

¥ 打赏
×
如果您觉得文章帮助了您就打赏一下吧
非常感谢你的打赏,我们将继续分享更多优质内容,让我们一起创建更加美好的网络世界!

支付宝扫一扫打赏

微信扫一扫打赏

本文《phpcms筛选范围不支持浮点型和0开头的范围的bug修复》发布于石头博客文章,作者:admin,如若转载,请注明出处:https://www.pweb123.com/cms/phpcms/739.html,否则禁止转载,谢谢配合!

文章点评

我来说两句 已有0条评论
点击图片更换

添加微信好友

添加微信好友

微信小程序

百度小程序