帝国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

相关推荐