<meter id="vsqli"></meter><optgroup id="vsqli"><ruby id="vsqli"><i id="vsqli"></i></ruby></optgroup>
<output id="vsqli"></output>

    <pre id="vsqli"><meter id="vsqli"></meter></pre>

    1. <small id="vsqli"><strong id="vsqli"><del id="vsqli"></del></strong></small>

    2. <output id="vsqli"><ruby id="vsqli"></ruby></output>
      <big id="vsqli"></big>
      <code id="vsqli"></code>
        <big id="vsqli"><strong id="vsqli"></strong></big>
      1. <td id="vsqli"></td>

          <td id="vsqli"></td>
            
            

                  1. <dl id="vsqli"></dl>
                      <dl id="vsqli"></dl>
                      1. <dl id="vsqli"><ins id="vsqli"></ins></dl>

                          <dl id="vsqli"><ins id="vsqli"></ins></dl>

                        1. 返回舊版| 微信建站| 建站之家論壇| 我要建站 | 建站學習 | 加入收藏
                          PHPCMS當前位置:首頁 > cms教程 > 綜合cms > PHPCMS > 正文

                          phpcms篩選范圍不支持浮點型和0開頭的范圍的bug修復

                          發布時間:2018-07-02 10:47: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'])) { 

                          相關欄目
                          熱門文章
                          最新圖文
                          評論排行
                          版權所有:鄭州騰石網絡科技有限公司 備案信息:豫ICP備18019117號
                          站長QQ:2863868475 業務合作咨詢:15137100750(同微信)
                          本站所有投放的廣告是有其他網站提供,不代表本站立場,同時網站首頁廣告位對外出租詳情咨詢本站站長!同時歡迎廣大站長加入個人建站團隊
                          • 建站客服
                          • CMS仿站
                          • CMS學習
                          • 技術交流群:336572814
                          云南11选5开奖结果