ECMS7.0搜索功能,数组,方便第三方程序接入

<?php
/*
 * 
 * -+------------------------------------------------------------------------+-
 * | Author : pkkgu
 * | Email  : [email protected]
 * | WebSite: http://www.hzapi.com
 * | Contact: http://t.qq.com/ly0752
 * -+------------------------------------------------------------------------+-
 * | 帝国CMS7.0 搜索API
 * | 方便第三方程序接入,保留帝国所有帝国CMS的所有功能,仅对搜所结果处理(返回json_encode结果)
 * -+------------------------------------------------------------------------+-
 * -+ 不管是否为商业用途,您必须保留此头部信息并不得修改,尊重版权从现在做起 +
 *
 */ 

require("../../class/connect.php");
require("../../class/db_sql.php");
require("../../data/dbcache/class.php");
require("../../class/q_functions.php");
require "../".LoadLang("pub/fun.php");
$editor=1;
eCheckCloseMods('search');//关闭模块
$link=db_connect();
$empire=new mysqlquery();

//处理关键字
function SearchDoKeyboardVar($keyboard){
	$keyboard=RepPostVar2(trim($keyboard));
	$keyboard=str_replace('  ','',$keyboard);
	return $keyboard;
}

//返回SQL
function 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++)
			{
				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);
			if(!trim($kr[0])||!trim($kr[1]))
			{
				return '';
			}
			$where=$f." BETWEEN '".$kr[0]."' and '".$kr[1]."'";
		}
		else//相似
		{
			$where=$f." LIKE '%".str_replace(" ","%",$keyboard)."%'";
		}
	}
	else
	{
		$where=$f." LIKE '%".str_replace(" ","%",$keyboard)."%'";
	}
	return $where;
}
//前台分页
function wexin_page1($num,$line,$page_line,$start,$page,$search){
	global $fun_r;
	if($num<=$line)
	{
		return '';
	}
	$weixin_page=array();
	$search=RepPostStr($search,1);
	$url=eReturnSelfPage(0).'?page';
	$snum=2;//最小页数
	$totalpage=ceil($num/$line);//取得总页数
	$firststr='<a title="'.$fun_r['trecord'].'">&nbsp;<b>'.$num.'</b> </a>&nbsp;&nbsp;';
	$weixin_page['trecord']=$num; //取得总页数
	$weixin_page['toppage']=0; //取得首页
	//上一页
	if($page<>0)
	{
		$toppage='<a href="'.$url.'=0'.$search.'">'.$fun_r['startpage'].'</a>&nbsp;';
		$pagepr=$page-1;
		$weixin_page['prepage']=$pagepr; //上一页
		$prepage='<a href="'.$url.'='.$pagepr.$search.'">'.$fun_r['pripage'].'</a>';
	}
	//下一页
	if($page!=$totalpage-1)
	{
		$pagenex=$page+1;
		$weixin_page['nextpage']=$pagenex; //下一页
		$nextpage='&nbsp;<a href="'.$url.'='.$pagenex.$search.'">'.$fun_r['nextpage'].'</a>';
		$lastpage='&nbsp;<a href="'.$url.'='.($totalpage-1).$search.'">'.$fun_r['lastpage'].'</a>';
	}
	$weixin_page['lastpage']=$totalpage-1; //取得首页
	$starti=$page-$snum<0?0:$page-$snum;
	$no=0;
	$weixin_page_num=array();
	for($i=$starti;$i<$totalpage&&$no<$page_line;$i++)
	{
		$no++;
		if($page==$i)
		{
			$is_1="<b>";
			$is_2="</b>";
		}
		else
		{
			$is_1='<a href="'.$url.'='.$i.$search.'">';
			$is_2="</a>";
		}
		$pagenum=$i+1;
		$returnstr.="&nbsp;".$is_1.$pagenum.$is_2;
		$weixin_page_num[]=$pagenum; //分页
	}
	$returnstr=$firststr.$toppage.$prepage.$returnstr.$nextpage.$lastpage;
	
	$weixin_page['pagenum']=$weixin_page_num; //当前分页
	$weixin_page['currentpage']=$page; //取得首页
	
	//return $returnstr;
	return $weixin_page;
}
//错误提示
function printerror_weixin($error="",$gotourl="",$ecms=0,$noautourl=0,$novar=0){
	global $empire,$editor,$public_r,$ecms_config;
	if($editor==1){$a="../";}
	elseif($editor==2){$a="../../";}
	elseif($editor==3){$a="../../../";}
	else{$a="";}
	if($ecms==1||$ecms==9)
	{
		$a=ECMS_PATH.'e/data/';
	}
	if(empty($error))
	{$error="DbError";}
	@include $a.LoadLang("pub/q_message.php");
	$error=empty($novar)?$qmessage_r[$error]:$error;
	$ret=array();
	$ret['schinfo']=array(
		'error'=>1,
		'message'=>$error,
	);
	echo  str_replace('\\/', '/', json_encode($ret));
	db_close();
	$empire=null;
	exit();
}

//变量
if($_GET['searchget']==1){
	$_POST=$_GET;
}

$ip=egetip();
$searchtime=time();
$getvar=$_POST['getvar'];
if(empty($getvar))
{
	$getfrom="history.go(-1)";
	$dogetvar='';
}
else
{
}
//返回
//$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_weixin("NotLevelToSearch",$getfrom,1);
	}
}
//搜索间隔
$lastsearchtime=getcvar('lastsearchtime');
if($lastsearchtime)
{
	if($searchtime-$lastsearchtime<$public_r[searchtime])
	{
		printerror_weixin("SearchOutTime",$getfrom,1);
	}
}
//搜索字段
$searchclass=$_POST['show'];
if(empty($searchclass)||strstr($searchclass," "))
{
	printerror_weixin("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)//按数据表
{
	$tbnamenum=$empire->gettotal("select count(*) as total from {$dbtbpre}enewstable where tbname='$s_tbname' limit 1");
	if(!$tbnamenum)
	{
		printerror_weixin("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_weixin("SearchNotRecord",$getfrom,1);
	}
	$modid=$thestemp_r['modid'];
}
else
{
	$tbname=$public_r['tbname'];
	$modid=0;
}
//表不存在
if(empty($tbname)||InfoIsInTable($tbname))
{
	printerror_weixin("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_weixin("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_weixin("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_weixin("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();
	}
}
if(empty($searchid))
{
	printerror_weixin("SearchNotRecord",$getfrom,1);
}
$search_r=$empire->fetch1("select searchid,keyboard,result_num,orderby,myorder,tbname,tempid,andsql,trueclassid from {$dbtbpre}enewssearch where searchid='$searchid'");
if(empty($search_r['searchid'])||InfoIsInTable($search_r[tbname]))
{
	printerror_weixin("SearchNotRecord",$getfrom,1);
}

$page=(int)$_GET['page'];
$page=RepPIntvar($page);
$start=0;

$page_line=$public_r['search_pagenum'];//每页显示链接数
//$line=$public_r['search_num'];
$line=5;//每页显示记录数
$offset=$page*$line;//总偏移量
$search="&searchid=".$searchid;
$myorder=$search_r[orderby];
if(empty($search_r[myorder]))
{
	$myorder.=" desc";
}
$add=stripSlashes($search_r['andsql']);
$num=$search_r[result_num];
$query="select * from {$dbtbpre}ecms_".$search_r[tbname].($add?' where '.substr($add,5):'');
$query.=" order by ".$myorder." limit $offset,$line";
$sql=$empire->query($query);
//$listpage=page1($num,$line,$page_line,$start,$page,$search);
$search_r[keyboard]=ehtmlspecialchars($search_r[keyboard]);
//字段

$ret=array();
$ret['schinfo']=array(
	'error'=>0,
	'keyboard'=>$search_r[keyboard]
);
$ret['page']=wexin_page1($num,$line,$page_line,$start,$page,$search);
$ret['content']=array();
$bqno=0;
//'searchvar'=>',title,smalltext,',
while($r=$empire->fetch($sql))
{
	$bqno++;
	$searchvar = substr($emod_r[$tempr['modid']]['searchvar'],1,strlen($emod_r[$tempr['modid']]['searchvar'])-2);// 楼前搜所字短
	$tbmainf = substr($emod_r[$tempr['modid']]['tbmainf'],0,strlen($emod_r[$tempr['modid']]['tbmainf'])-1); //系统字段
	$searchvar=$searchvar.$tbmainf;
	if($searchvar){
		$searchvar_arr=explode(',',$searchvar);
		for($i=0;$i<count($searchvar_arr);$i++){
			$ret['content'][$bqno][$searchvar_arr[$i]]=$r[$searchvar_arr[$i]];
		}
		
	}
	$ret['content'][$bqno]['classurl']=sys_ReturnBqClassname($r,9);
	$ret['content'][$bqno]['classname']=$class_r[$r[classid]][bname]?$class_r[$r[classid]][bname]:$class_r[$r[classid]][classname];
	$ret['content'][$bqno]['titleurl']=sys_ReturnBqTitleLink($r);//链接
	$ret['content'][$bqno]['newstime']=format_datetime($r['newstime'],"Y-m-d H:i:s");
	$no++;
}
db_close();
$empire=null;
echo  str_replace('\\/', '/', json_encode($ret));
/*
Array
(
    [schinfo] => Array
        (
            [error] => 0
            [keyboard] => 中国
        )

    [page] => Array
        (
            [trecord] => 27
            [toppage] => 0
            [nextpage] => 1
            [lastpage] => 5
            [pagenum] => Array
                (
                    [0] => 1
                    [1] => 2
                    [2] => 3
                    [3] => 4
                    [4] => 5
                    [5] => 6
                )

            [currentpage] => 0
        )

    [content] => Array
        (
            [1] => Array
                (
                    [title] => 中国中国中国中国中国中国中国中国中国kkkk
                    [smalltext] => 中国中国中国中国中国中国中国中国中国
                    [titlepic] => 
                    [newstime] => 2013-10-18 10:40:00
                    [ftitle] => 
                    [diggtop] => 0
                    [classurl] => /e/action/ListInfo/?classid=1
                    [classname] => test
                    [titleurl] => /e/action/ShowInfo.php?classid=1&id=29
                )

            [2] => Array
                (
                    [title] => 中国中国中国中国中国中国中国中国中国kkkk
                    [smalltext] => 中国中国中国中国中国中国中国中国中国
                    [titlepic] => 
                    [newstime] => 2013-10-18 10:40:00
                    [ftitle] => 
                    [diggtop] => 0
                    [classurl] => /e/action/ListInfo/?classid=1
                    [classname] => test
                    [titleurl] => /e/action/ShowInfo.php?classid=1&id=28
                )

            [3] => Array
                (
                    [title] => 中国中国中国中国中国中国中国中国中国kkkk
                    [smalltext] => 中国中国中国中国中国中国中国中国中国
                    [titlepic] => 
                    [newstime] => 2013-10-18 10:40:00
                    [ftitle] => 
                    [diggtop] => 0
                    [classurl] => /e/action/ListInfo/?classid=1
                    [classname] => test
                    [titleurl] => /e/action/ShowInfo.php?classid=1&id=27
                )

            [4] => Array
                (
                    [title] => 中国中国中国中国中国中国中国中国中国kkkk
                    [smalltext] => 中国中国中国中国中国中国中国中国中国
                    [titlepic] => 
                    [newstime] => 2013-10-18 10:40:00
                    [ftitle] => 
                    [diggtop] => 0
                    [classurl] => /e/action/ListInfo/?classid=1
                    [classname] => test
                    [titleurl] => /e/action/ShowInfo.php?classid=1&id=26
                )

            [5] => Array
                (
                    [title] => 中国中国中国中国中国中国中国中国中国kkkk
                    [smalltext] => 中国中国中国中国中国中国中国中国中国
                    [titlepic] => 
                    [newstime] => 2013-10-18 10:40:00
                    [ftitle] => 
                    [diggtop] => 0
                    [classurl] => /e/action/ListInfo/?classid=1
                    [classname] => test
                    [titleurl] => /e/action/ShowInfo.php?classid=1&id=25
                )
        )
)
 */
?>

你可能感兴趣的:(ECMS7.0搜索功能,数组,方便第三方程序接入)