帝国CMS二次开发终究作用
二次开发修正办法
翻开/e/search/index.php
1、找到:
//处理关键字 functionSearchDoKeyboardVar($keyboard){ $keyboard=RepPostVar2(trim($keyboard)); $keyboard=str_replace('','',$keyboard); return$keyboard; }
修正为:
//处理关键字 functionSearchDoKeyboardVar($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:
<?php require("../class/connect.php"); require("../class/db_sql.php"); require("../data/dbcache/class.php"); require("../class/q_functions.php"); eCheckCloseMods('search');//封闭模块 $link=db_connect(); $empire=newmysqlquery(); //处理关键字 functionSearchDoKeyboardVar($keyboard){ $keyboard=RepPostVar2(trim($keyboard)); //$keyboard=str_replace('','',$keyboard); /*xuan查找关键字优化*/ $keyboard=preg_replace('/[s]+/s','',$keyboard); /*xuan查找关键字优化*/ return$keyboard; } //回来SQL functionSearchDoKeyboard($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(newstimeBETWEEN'".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(priceBETWEEN".$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]?"andclassid='$trueclassid'":"and".ReturnClass($class_r[$trueclassid][sonclass]); } $tbname=$class_r[$trueclassid][tbname]; $modid=$class_r[$trueclassid][modid]; } elseif($s_tbname)//按数据表 { $tbnamenum=$empire->gettotal("selectcount(*)astotalfrom{$dbtbpre}enewstablewheretbname='$s_tbname'limit1"); if(!$tbnamenum) { printerror("SearchNotRecord",$getfrom,1); } $tbname=$s_tbname; //模型id $thestemp_r=$empire->fetch1("selectmodidfrom".GetTemptb("enewssearchtemp")."wheretempid='$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.="andttid='$truettid'"; } } //会员 $member=$_POST['member']; if($member==1) { $add.='andismember=1'; } elseif($member==2) { $add.='andismember=0'; } //模型 $tempr=array(); if(empty($class_r[$trueclassid][searchtempid])) { if(empty($modid)) { $tempr=$empire->fetch1("selectmodidfrom".GetTemptb("enewssearchtemp")."whereisdefault=1limit1"); } 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("selectsearchvar,tbnamefrom{$dbtbpre}enewsmodwheremid='$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="selectcount(*)astotalfrom{$dbtbpre}ecms_".$tbname.($allwhere?'where'.substr($allwhere,5):''); $search_r=$empire->fetch1("selectsearchidfrom{$dbtbpre}enewssearchwherecheckpass='$checkpass'limit1"); $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}enewssearchsetsearchtime='$searchtime',result_num='$search_num',onclick=onclick+1,orderby='$orderby',myorder='$myorder',tempid='$s_tempid'wheresearchid='$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("insertinto{$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+3600*24); if(!$searchid) { printerror("SearchNotRecord",$getfrom,1); } else { Header("Location:result/?searchid=$searchid".$dogetvar); } db_close(); $empire=null; ?>
本办法兼容帝国CMS7.0/7.2,其他版别暂未测验。
声明:有的资源均来自网络转载,版权归原作者所有,如有侵犯到您的权益 请联系邮箱:123456@qq.com 我们将配合处理!
原文地址:帝国CMS二次开发搜索支持多关键字发布于2022-06-24 07:44:00