二次开发修改方法打开/e/search/index.php1、找到://处理关键字function SearchDoKeyboardVar($keyboard){ $keyboard=RepPostVar2(trim($keyboard)); $keyboard=str_replace(' ','',$keyboard); return $keyboard;}修改为://处理关键字function SearchDoKeyboardVar($keyboard){ $keyboard=RepPostVar2(trim($keyboard)); //$keyboard=str_replace(' ','',$keyboard);/*xuan 搜索关键字优化*/$keyboard=preg_replace('/[s]+/s', ' ', $keyboard);/*xuan 搜索关键字优化*/ return $keyboard;}2、找到://(有两处,修改第二处)$where=$f." LIKE '%".$keyboard."%'";7.0版为:$where=$f." LIKE '%".str_replace(" ","%",$keyboard)."%'";修改为:/*xuan 搜索关键字优化*/preg_match_all("/[^s]+/s",$keyboard,$keyarr);foreach ($keyarr[0] as $val){$tj.=$f." like '%".$val."%' or ";}$where=substr($tj,0,-4);/*xuan 搜索关键字优化*/这样即可。懒人直接复制以下代码替换/e/search/index.php中所有代码即可/e/search/index.php:<?phprequire("../class/connect.php");require("../class/db_sql.php");require("../data/dbcache/class.php");require("../class/q_functions.php");eCheckCloseMods('search');//关闭模块$link=db_connect();$empire=new mysqlquery();//处理关键字function SearchDoKeyboardVar($keyboard){ $keyboard=RepPostVar2(trim($keyboard)); //$keyboard=str_replace(' ','',$keyboard);/*xuan 搜索关键字优化*/$keyboard=preg_replace('/[s]+/s', ' ', $keyboard);/*xuan 搜索关键字优化*/ return $keyboard;}//返回SQLfunction SearchDoKeyboard($f,$hh,$keyboard){ $where=''; $keyboard=SearchDoKeyboardVar($keyboard); if(empty($keyboard)) { return ""; } if(!empty($hh)) { if($hh=='LT')//小于 { $where=$f."<'".$keyboard."'"; } elseif($hh=='GT')//大于 { $where=$f.">'".$keyboard."'"; } elseif($hh=='EQ')//等于 { $where=$f."='".$keyboard."'"; } elseif($hh=='LE')//小于等于 { $where=$f."<='".$keyboard."'"; } elseif($hh=='GE')//大于等于 { $where=$f.">='".$keyboard."'"; } elseif($hh=='NE')//不等于 { $where=$f."<>'".$keyboard."'"; } elseif($hh=='IN')//包含 { $kr=explode(' ',$keyboard); $kcount=count($kr); $kbs=''; $dh=''; for($i=0;$i<$kcount;$i++) { $kr[$i]=(float)$kr[$i]; if(empty($kr[$i])) { continue; } if($kbs) { $dh=','; } $kbs.=$dh."'".$kr[$i]."'"; } if($kbs) { $where=$f." IN (".$kbs.")"; } else { return ''; } } elseif($hh=='BT')//范围 { $keyboard=ltrim($keyboard); if(!strstr($keyboard,' ')) { return ''; } $kr=explode(' ',$keyboard); $kr[0]=(float)$kr[0]; $kr[1]=(float)$kr[1]; if(!trim($kr[0])||!trim($kr[1])) { return ''; } $where=$f." BETWEEN '".$kr[0]."' and '".$kr[1]."'"; } else//相似 { $where=$f." LIKE '%".$keyboard."%'"; } } else { //$where=$f." LIKE '%".str_replace(" ","%",$keyboard)."%'";/*xuan 搜索关键字优化*/preg_match_all("/[^s]+/s",$keyboard,$keyarr);foreach ($keyarr[0] as $val){$tj.=$f." like '%".$val."%' or ";}$where=substr($tj,0,-4);/*xuan 搜索关键字优化*/ } return $where;}//变量if($_GET['searchget']==1){ $_POST=$_GET;}$ip=egetip();$searchtime=time();$getvar=$_POST['getvar'];if(empty($getvar)){ $getfrom="history.go(-1)"; $dogetvar='';}else{ $getfrom="../../search/"; $dogetvar="&getvar=1";}//返回$getfrom=DoingReturnUrl($getfrom,$_POST['ecmsfrom']);//搜索用户组if($public_r['searchgroupid']){ $psearchgroupid=$public_r['searchgroupid']; @include("../data/dbcache/MemberLevel.php"); $searchgroupid=(int)getcvar('mlgroupid'); if($level_r[$searchgroupid][level]<$level_r[$psearchgroupid][level]) { printerror("NotLevelToSearch",$getfrom,1); }}//搜索间隔$lastsearchtime=getcvar('lastsearchtime');if($lastsearchtime){ if($searchtime-$lastsearchtime<$public_r[searchtime]) { printerror("SearchOutTime",$getfrom,1); }}//搜索字段$searchclass=$_POST['show'];if(empty($searchclass)||@strstr($searchclass," ")){ printerror("SearchNotRecord",$getfrom,1);}//时间范围$add='';$addtime='';$starttime=RepPostVar($_POST['starttime']);if(empty($starttime)){ $starttime="0000-00-00";}$endtime=RepPostVar($_POST['endtime']);if(empty($endtime)){ $endtime="0000-00-00";}if($endtime!="0000-00-00"){ $addtime=" and (newstime BETWEEN '".to_time($starttime." 00:00:00")."' and '".to_time($endtime." 23:59:59")."')";}//价格$addprice='';$startprice=(int)$_POST['startprice'];$endprice=(int)$_POST['endprice'];if($endprice){ $addprice=" and (price BETWEEN ".$startprice." and ".$endprice.")";}//搜索栏目及表$classid=RepPostVar($_POST['classid']);$s_tbname=RepPostVar($_POST['tbname']);$s_tempid=(int)$_POST['tempid'];$trueclassid=0;if($classid)//按栏目{ if(strstr($classid,","))//多栏目 { $son_r=sys_ReturnMoreClass($classid,1); $trueclassid=$son_r[0]; $add.=' and ('.$son_r[1].')'; } else { $trueclassid=intval($classid); $add.=$class_r[$trueclassid][islast]?" and classid='$trueclassid'":" and ".ReturnClass($class_r[$trueclassid][sonclass]); } $tbname=$class_r[$trueclassid][tbname]; $modid=$class_r[$trueclassid][modid];}elseif($s_tbname)//按<a href="http://www.11px.cn/tags/sjb/" target="_blank">数据表</a>{ $tbnamenum=$empire->gettotal("select count(*) as total from {$dbtbpre}enewstable where tbname='$s_tbname' limit 1"); if(!$tbnamenum) { printerror("SearchNotRecord",$getfrom,1); } $tbname=$s_tbname; //模型id $thestemp_r=$empire->fetch1("select modid from ".GetTemptb("enewssearchtemp")." where tempid='$s_tempid'"); if(empty($thestemp_r['modid'])) { printerror("SearchNotRecord",$getfrom,1); } $modid=$thestemp_r['modid'];}else{ $tbname=$public_r['tbname']; $modid=0;}//表不存在if(empty($tbname)||InfoIsInTable($tbname)){ printerror("SearchNotRecord",$getfrom,1);}//标题分类$ttid=RepPostVar($_POST['ttid']);$truettid=0;if($ttid){ if(strstr($ttid,","))//多标题分类 { $son_r=sys_ReturnMoreTT($ttid); $truettid=$son_r[0]; $add.=' and ('.$son_r[1].')'; } else { $truettid=intval($ttid); $add.=" and ttid='$truettid'"; }}//会员$member=$_POST['member'];if($member==1){ $add.=' and ismember=1';}elseif($member==2){ $add.=' and ismember=0';}//模型$tempr=array();if(empty($class_r[$trueclassid][searchtempid])){ if(empty($modid)) { $tempr=$empire->fetch1("select modid from ".GetTemptb("enewssearchtemp")." where isdefault=1 limit 1"); } else { $tempr[modid]=$modid; }}else{ $tempr[modid]=$modid;}//关键字$keyboard=$_POST['keyboard'];$keyboardone=0;if(is_array($keyboard)){}elseif(strstr($keyboard,',')){ $keyboard=explode(',',$keyboard);}else{ $keyboard=trim($keyboard); $len=strlen($keyboard); if($len<$public_r[min_keyboard]||$len>$public_r[max_keyboard]) { printerror("MinKeyboard",$getfrom,1); } $keyboardone=1;}//符号$hh=$_POST['hh'];$hhone=0;if(is_array($hh)){}elseif(strstr($hh,',')){ $hh=explode(',',$hh);}else{ $hhone=1;}//字段if(!is_array($searchclass)){ $searchclass=explode(',',$searchclass);}$andor=$_POST['andor'];$andor=$andor=='and'?'and':'or';$mr=$empire->fetch1("select searchvar,tbname from {$dbtbpre}enewsmod where mid='$tempr[modid]'");if(!strstr($mr[searchvar],",price,"))//是否包含价格{ $addprice=""; $startprice=0; $endprice=0;}//搜索特殊字段$mr[searchvar].='id,keyboard,userid,username,';$where='';$newsearchclass='';$count=count($searchclass);for($i=0;$i<$count;$i++){ if(empty($searchclass[$i])) { continue; } $searchclass[$i]=str_replace(',','',$searchclass[$i]); if(!strstr($mr[searchvar],",".$searchclass[$i].",")) { continue; } $searchclass[$i]=RepPostVar($searchclass[$i]); $dh=empty($newsearchclass)?'':','; $newsearchclass.=$dh.$searchclass[$i]; $dohh=$hhone==1?$hh:$hh[$i]; $dokeyboard=$keyboardone==1?$keyboard:$keyboard[$i]; $onewhere=SearchDoKeyboard($searchclass[$i],$dohh,$dokeyboard); if($onewhere) { $or=empty($where)?'':' '.$andor.' '; $where.=$or.'('.$onewhere.')'; }}//参数错if(empty($newsearchclass)){ printerror("SearchNotRecord",$getfrom,1);}if($where){ $add.=' and ('.$where.')';}$allwhere=$add.$addtime.$addprice;$keyboard=$keyboardone==1?SearchDoKeyboardVar($keyboard):'';$andsql=addslashes($allwhere);if(strlen($newsearchclass)>250||strlen($classid)>200||strlen($andsql)>3000||strlen($keyboard)>100||strlen($ttid)>200){ printerror("SearchNotRecord",$getfrom,1);}//验证码$checkpass=md5($allwhere.$tbname);$query="select count(*) as total from {$dbtbpre}ecms_".$tbname.($allwhere?' where '.substr($allwhere,5):'');$search_r=$empire->fetch1("select searchid from {$dbtbpre}enewssearch where checkpass='$checkpass' limit 1");$searchid=$search_r[searchid];//排序$orderby=RepPostVar($_POST['orderby']);$myorder=(int)$_POST['myorder'];if($orderby){ $orderr=ReturnDoOrderF($tempr[modid],$orderby,$myorder); $orderby=$orderr['returnf'];}else{ $orderby='newstime';}//是否有历史记录if($searchid){ $search_num=$empire->gettotal($query); $sql=$empire->query("update {$dbtbpre}enewssearch set searchtime='$searchtime',result_num='$search_num',onclick=onclick+1,orderby='$orderby',myorder='$myorder',tempid='$s_tempid' where searchid='$searchid'"); if(empty($search_num)) { $searchid=0; }}else{ $search_num=$empire->gettotal($query); if(empty($search_num)) { $searchid=0; } else { $iskey=$keyboardone==1?0:1; $sql=$empire->query("insert into {$dbtbpre}enewssearch(searchtime,keyboard,searchclass,result_num,searchip,classid,onclick,orderby,myorder,checkpass,tbname,tempid,iskey,andsql,trueclassid) values('$searchtime','$keyboard','$newsearchclass','$search_num','$ip','$classid',1,'$orderby','$myorder','$checkpass','$tbname','$s_tempid','$iskey','$andsql','$trueclassid')"); $searchid=$empire->lastid(); }}//设置最后搜索时间$set1=esetcookie("lastsearchtime",$searchtime,$searchtime+<a href="http://www.11px.cn/tags/360/" target="_blank">360</a>0*24);if(!$searchid){ printerror("SearchNotRecord",$getfrom,1);}else{ Header("Location:result/?searchid=$searchid".$dogetvar);}db_close();$empire=null;?>本方法兼容帝国CMS7.0/7.2,其他版本暂未测试。
新闻热点
疑难解答