TypeID = $typeid; $this->Keyword = $keyword; $this->OrderBy = $orderby; $this->KType = $kwtype; $this->PageSize = $upagesize; $this->StartTime = $starttime; $this->ChannelType = $achanneltype; if($searchtype=="") $this->SearchType = "titlekeyword"; else $this->SearchType = $searchtype; $this->dsql = new DedeSql(false); $this->dtp = new DedeTagParse(); $this->dtp->SetNameSpace("dede","{","}"); $this->dtp2 = new DedeTagParse(); $this->dtp2->SetNameSpace("field","[","]"); $this->TypeLink = new TypeLink($typeid); //$this->Keywords = $this->GetKeywords($keyword); $this->Keywords = $keyword; //设置一些全局参数的值 foreach($GLOBALS['PubFields'] as $k=>$v) $this->Fields[$k] = $v; $this->CountRecord(); /* $tempfile = $GLOBALS['cfg_basedir'].$GLOBALS['cfg_templets_dir']."/".$GLOBALS['cfg_df_style']."/search.htm"; if(!file_exists($tempfile)||!is_file($tempfile)){ $this->Close(); echo "模板文件:'".$tempfile."' 不存在,无法解析!"; exit(); } $this->dtp->LoadTemplate($tempfile); $this->TempInfos['tags'] = $this->dtp->CTags; $this->TempInfos['source'] = $this->dtp->SourceString; if($this->PageSize=="") $this->PageSize = 20; $this->TotalPage = ceil($this->TotalResult/$this->PageSize); if($this->PageNo==1){ $this->dsql->ExecuteNoneQuery("Update #@__search_keywords set result='".$this->TotalResult."' where keyword='".addslashes($keyword)."'; "); } */ } //php4构造函数 //--------------------------- function SearchView($typeid,$keyword,$orderby,$achanneltype="all", $searchtype="",$starttime=0,$upagesize=20,$kwtype=1) { $this->__construct($typeid,$keyword,$orderby,$achanneltype,$searchtype,$starttime,$upagesize,$kwtype); } //--------------------------- //关闭相关资源 //--------------------------- function Close() { $this->dsql->Close(); $this->TypeLink->Close(); } //获得关键字的分词结果,并保存到数据库 //-------------------------------- function GetKeywords($keyword){ $keyword = cn_substr($keyword,50); $row = $this->dsql->GetOne("Select spwords From #@__search_keywords where keyword='".addslashes($keyword)."'; "); if(!is_array($row)){ if(strlen($keyword)>7){ $sp = new SplitWord(); $keywords = $sp->SplitRMM($keyword); $sp->Clear(); $keywords = ereg_replace("[ ]{1,}"," ",trim($keywords)); }else{ $keywords = $keyword; } $inquery = "INSERT INTO `#@__search_keywords`(`keyword`,`spwords`,`count`,`result`,`lasttime`) VALUES ('".addslashes($keyword)."', '".addslashes($keywords)."', '1', '0', '".mytime()."'); "; $this->dsql->ExecuteNoneQuery($inquery); }else{ $this->dsql->ExecuteNoneQuery("Update #@__search_keywords set count=count+1,lasttime='".mytime()."' where keyword='".addslashes($keyword)."'; "); $keywords = $row['spwords']; } return $keywords; } //---------------- //获得关键字SQL //---------------- function GetKeywordSql() { //$k = explode(" ",$this->Keywords); $k = $this->Keywords; $kwsql = ""; //foreach($ks as $k){ $k = trim($k); //if(strlen($k)<2) continue; //if(ord($k[0])>0x80 && strlen($k)<3) continue; //$k = addslashes($k); //if($this->SearchType=="title"){ if($this->KType==1) $kwsql .= " Or #@__archives.title = '$k' "; else $kwsql .= " And #@__archives.title = '$k' "; //}else{ // if($this->KType==1) $kwsql .= " Or CONCAT(#@__archives.title,' ',#@__archives.description,' ',#@__archives.writer,' ',#@__archives.source) = '$k' Or CONCAT(' ',#@__archives.keywords,' ') = '$k' "; // else $kwsql .= " And (CONCAT(#@__archives.title,' ',#@__archives.description,' ',#@__archives.writer,' ',#@__archives.source) = '$k' Or CONCAT(' ',#@__archives.keywords,' ') = '$k') "; //} //} if($this->KType==1) $kwsql = " ( ".ereg_replace("^ Or","",$kwsql)." ) "; else $kwsql = " ( ".ereg_replace("^ And","",$kwsql)." ) "; if($kwsql==" ( ) ") return ""; else return $kwsql; } //------------------- //获得相关的关键字 //------------------- function GetLikeWords($num=8){ $ks = explode(" ",$this->Keywords); $lsql = ""; foreach($ks as $k){ $k = trim($k); if(strlen($k)<2) continue; if(ord($k[0])>0x80 && strlen($k)<3) continue; $k = addslashes($k); if($lsql=="") $lsql = $lsql." CONCAT(spwords,' ') like '%$k %' "; else $lsql = $lsql." Or CONCAT(spwords,' ') like '%$k %' "; } if($lsql=="") return ""; else{ $likeword = ""; $lsql = "(".$lsql.") And Not(keyword like '".addslashes($this->Keyword)."') "; $this->dsql->SetQuery("Select keyword,count From #@__search_keywords where $lsql order by lasttime desc limit 0,$num; "); $this->dsql->Execute('l'); while($row=$this->dsql->GetArray('l')){ if($row['count']>1000) $fstyle=" style='font-size:11pt;color:red'"; else if($row['count']>300) $fstyle=" style='font-size:10pt;color:green'"; else $style = ""; $likeword .= " ".$row['keyword']." "; } return $likeword; } } //---------------- //加粗关键字 //---------------- function GetRedKeyWord($fstr) { $ks = explode(" ",$this->Keywords); $kwsql = ""; foreach($ks as $k){ $k = trim($k); if($k=="") continue; if(ord($k[0])>0x80 && strlen($k)<3) continue; $fstr = str_replace($k,"$k",$fstr); } return $fstr; } //------------------ //统计列表里的记录 //------------------ function CountRecord() { $this->TotalResult = -1; if(isset($GLOBALS['TotalResult'])) $this->TotalResult = $GLOBALS['TotalResult']; if(isset($GLOBALS['PageNo'])) $this->PageNo = $GLOBALS['PageNo']; else $this->PageNo = 1; if($this->TotalResult==-1) { $ksql = $this->GetKeywordSql(); if($ksql!="") $ksql = " And ".$ksql; $addSql = " arcrank > -1 $ksql"; if($this->TypeID > 0) $addSql .= " And (".$this->TypeLink->GetSunID($this->TypeID,"#@__archives",0)." Or #@__archives.typeid2='".$this->TypeID."') "; //if($this->StartTime > 0) $addSql .= " And senddate>'".$this->StartTime."' "; //if($this->ChannelType != 0 ) $addSql .= " And channel='".$this->ChannelType."'"; $cquery = "Select count(*) as dd From #@__archives where $addSql"; $row = $this->dsql->GetOne($cquery); if(is_array($row)) $this->TotalResult = $row['dd']; else $this->TotalResult = 0; } } //------------------ //显示列表 //------------------ function Display() { foreach($this->dtp->CTags as $tagid=>$ctag){ $tagname = $ctag->GetName(); if($tagname=="list"){ $limitstart = ($this->PageNo-1) * $this->PageSize; $row = $this->PageSize; if(trim($ctag->GetInnerText())==""){ $InnerText = GetSysTemplets("list_fulllist.htm"); } else{ $InnerText = trim($ctag->GetInnerText()); } $this->dtp->Assign($tagid, $this->GetArcList($limitstart, $row, $ctag->GetAtt("col"), $ctag->GetAtt("titlelen"), $ctag->GetAtt("infolen"), $ctag->GetAtt("imgwidth"), $ctag->GetAtt("imgheight"), $this->ChannelType, $this->OrderBy, $InnerText, $ctag->GetAtt("tablewidth")) ); } else if($tagname=="pagelist"){ $list_len = trim($ctag->GetAtt("listsize")); if($list_len=="") $list_len = 3; $this->dtp->Assign($tagid,$this->GetPageListDM($list_len)); } else if($tagname=="likewords"){ $this->dtp->Assign($tagid,$this->GetLikeWords($ctag->GetAtt('num'))); } else if($tagname=="hotwords"){ $this->dtp->Assign($tagid, GetHotKeywords($this->dsql,$ctag->GetAtt('num'),$ctag->GetAtt('subday'),$ctag->GetAtt('maxlength'))); } else if($tagname=="field") //类别的指定字段 { if(isset($this->Fields[$ctag->GetAtt('name')])) $this->dtp->Assign($tagid,$this->Fields[$ctag->GetAtt('name')]); else $this->dtp->Assign($tagid,""); } else if($tagname=="channel")//下级频道列表 { if($this->TypeID>0){ $typeid = $this->TypeID; $reid = $this->TypeLink->TypeInfos['reID']; } else{ $typeid = 0; $reid=0; } $this->dtp->Assign($tagid, $this->TypeLink->GetChannelList($typeid, $reid, $ctag->GetAtt("row"), $ctag->GetAtt("type"), $ctag->GetInnerText() ) ); }//End if } $this->Close(); $this->dtp->Display(); } //---------------------------------- //获得文档列表 //--------------------------------- function GetArcList($limitstart=0,$row=10,$col=1,$titlelen=30,$infolen=250, $imgwidth=120,$imgheight=90,$achanneltype="all",$orderby="default",$innertext="",$tablewidth="100") { $typeid=$this->TypeID; if($row=="") $row = 10; if($limitstart=="") $limitstart = 0; if($titlelen=="") $titlelen = 30; if($infolen=="") $infolen = 250; if($imgwidth=="") $imgwidth = 120; if($imgheight=="") $imgheight = 120; if($achanneltype=="") $achanneltype = "0"; if($orderby=="") $orderby="default"; else $orderby=strtolower($orderby); $tablewidth = str_replace("%","",$tablewidth); if($tablewidth=="") $tablewidth=100; if($col=="") $col=1; $colWidth = ceil(100/$col); $tablewidth = $tablewidth."%"; $colWidth = $colWidth."%"; $innertext = trim($innertext); if($innertext=="") $innertext = GetSysTemplets("search_list.htm"); //按不同情况设定SQL条件 $ksql = $this->GetKeywordSql(); if($ksql!="") $ksql = " And ".$ksql; $orwhere = " #@__archives.arcrank > -1 $ksql"; if($this->StartTime > 0) $orwhere .= " And #@__archives.senddate > '".$this->StartTime."' "; if($this->ChannelType != 0) $orwhere .= " And #@__archives.channel='".$this->ChannelType."'"; if($this->TypeID>0) $orwhere .= " And (".$this->TypeLink->GetSunID($this->TypeID,"#@__archives",0)." Or #@__archives.typeid2='".$this->TypeID."') "; //排序方式 $ordersql = ""; if($orderby=="senddate") $ordersql=" order by #@__archives.senddate desc"; else if($orderby=="pubdate") $ordersql=" order by #@__archives.pubdate desc"; else if($orderby=="id") $ordersql=" order by #@__archives.ID desc"; else $ordersql=" order by #@__archives.sortrank desc"; // //---------------------------- $query = "Select #@__archives.ID,#@__archives.title,#@__archives.typeid,#@__archives.ismake,#@__archives.money, #@__archives.description,#@__archives.pubdate,#@__archives.senddate,#@__archives.arcrank,#@__archives.click, #@__archives.litpic,#@__arctype.typedir,#@__arctype.typename,#@__arctype.isdefault, #@__arctype.defaultname,#@__arctype.namerule,#@__arctype.namerule2,#@__arctype.ispart, #@__arctype.moresite,#@__arctype.siteurl from #@__archives left join #@__arctype on #@__archives.typeid=#@__arctype.ID where $orwhere $ordersql limit $limitstart,$row"; //echo $query; $this->dsql->SetQuery($query); $this->dsql->Execute("al"); $artlist = ""; if($col>1) $artlist = "\r\n"; $this->dtp2->LoadSource($innertext); for($i=0;$i<$row;$i++) { if($col>1) $artlist .= "\r\n"; for($j=0;$j<$col;$j++) { if($col>1) $artlist .= "\r\n"; }//Loop Col if($col>1) $artlist .= "\r\n"; }//Loop Line if($col>1) $artlist .= "
\r\n"; if($row = $this->dsql->GetArray("al")) { //处理一些特殊字段 $row["arcurl"] = GetFileUrl($row["ID"],$row["typeid"],$row["senddate"],$row["title"], $row["ismake"],$row["arcrank"],$row["namerule"],$row["typedir"],$row["money"],true,$row["siteurl"]); $row["description"] = $this->GetRedKeyWord(cn_substr($row["description"],$infolen)); $row["title"] = $this->GetRedKeyWord(cn_substr($row["title"],$titlelen)); $row["id"] = $row["ID"]; if($row["litpic"]=="") $row["litpic"] = $GLOBALS["cfg_plus_dir"]."/img/dfpic.gif"; $row["picname"] = $row["litpic"]; $row["typeurl"] = $this->GetListUrl($row["typeid"],$row["typedir"],$row["isdefault"],$row["defaultname"],$row["ispart"],$row["namerule2"],$row["siteurl"]); $row["info"] = $row["description"]; $row["filename"] = $row["arcurl"]; $row["stime"] = GetDateMK($row["pubdate"]); $row["textlink"] = "".$row["title"].""; $row["typelink"] = "[".$row["typename"]."]"; $row["imglink"] = ""; $row["image"] = ""; $row["phpurl"] = $GLOBALS["cfg_plus_dir"]; $row["templeturl"] = $GLOBALS["cfg_templets_dir"]; $row["memberurl"] = $GLOBALS["cfg_member_dir"]; //--------------------------- if(is_array($this->dtp2->CTags)){ foreach($this->dtp2->CTags as $k=>$ctag){ if(isset($row[$ctag->GetName()])) $this->dtp2->Assign($k,$row[$ctag->GetName()]); else $this->dtp2->Assign($k,""); } } $artlist .= $this->dtp2->GetResult(); }//if hasRow else{ $artlist .= ""; } if($col>1) $artlist .= "
\r\n"; $this->dsql->FreeResult("al"); return $artlist; } //--------------------------------- //获取动态的分页列表 //--------------------------------- function GetPageListDM($list_len) { $prepage=""; $nextpage=""; $prepagenum = $this->PageNo-1; $nextpagenum = $this->PageNo+1; if($list_len==""||ereg("[^0-9]",$list_len)) $list_len=3; $totalpage = ceil($this->TotalResult/$this->PageSize); if($totalpage<=1 && $this->TotalResult>0) return "共1页/".$this->TotalResult."条记录"; if($this->TotalResult == 0) return "共0页/".$this->TotalResult."条记录"; $purl = $this->GetCurUrl(); $geturl = "keyword=".urlencode($this->Keyword)."&searchtype=".$this->SearchType; $geturl .= "&channeltype=".$this->ChannelType."&orderby=".$this->OrderBy; $geturl .= "&kwtype=".$this->KType."&pagesize=".$this->PageSize; $geturl .= "&typeid=".$this->TypeID."&TotalResult=".$this->TotalResult."&"; $hidenform = "\r\n"; $hidenform .= "\r\n"; $purl .= "?".$geturl; //获得上一页和下一页的链接 if($this->PageNo != 1){ $prepage.="上一页\r\n"; $indexpage="首页\r\n"; } else{ $indexpage="首页\r\n"; } if($this->PageNo!=$totalpage && $totalpage>1){ $nextpage.="下一页\r\n"; $endpage="末页\r\n"; } else{ $endpage="末页\r\n"; } //获得数字链接 $listdd=""; $total_list = $list_len * 2 + 1; if($this->PageNo >= $total_list) { $j = $this->PageNo-$list_len; $total_list = $this->PageNo+$list_len; if($total_list>$totalpage) $total_list=$totalpage; } else{ $j=1; if($total_list>$totalpage) $total_list=$totalpage; } for($j;$j<=$total_list;$j++) { if($j==$this->PageNo) $listdd.= "$j \r\n"; else $listdd.="[".$j."] \r\n"; } $plist = "\r\n"; $plist .= "\r\n"; $plist .= "$hidenform"; $plist .= $indexpage; $plist .= $prepage; $plist .= $listdd; $plist .= $nextpage; $plist .= $endpage; if($totalpage>$total_list){ $plist.="\r\n"; $plist.="\r\n"; } $plist .= "\r\n\r\n
\r\n"; return $plist; } //-------------------------- //获得一个指定的频道的链接 //-------------------------- function GetListUrl($typeid,$typedir,$isdefault,$defaultname,$ispart,$namerule2) { return GetTypeUrl($typeid,MfTypedir($typedir),$isdefault,$defaultname,$ispart,$namerule2); } //--------------- //获得当前的页面文件的url //---------------- function GetCurUrl() { if(!empty($_SERVER["REQUEST_URI"])){ $nowurl = $_SERVER["REQUEST_URI"]; $nowurls = explode("?",$nowurl); $nowurl = $nowurls[0]; } else { $nowurl = $_SERVER["PHP_SELF"]; } return $nowurl; } }//End Class if(empty($typeid)) $typeid = 0; else $typeid = ereg_replace("[^0-9]","",$typeid); if(empty($orderby)) $orderby=""; else $orderby = eregi_replace("[^a-z]","",$orderby); if(empty($channeltype)) $channeltype="0"; else $channeltype = eregi_replace("[^0-9]","",$channeltype); if(empty($searchtype)) $searchtype = "titlekeyword"; else $searchtype = eregi_replace("[^a-z]","",$searchtype); //每页显示的结果数,在用户没指定的情况下用10 if(empty($pagesize)) $pagesize = 1; else $pagesize = eregi_replace("[^0-9]","",$pagesize); if(!isset($kwtype)) $kwtype = 0; if(empty($keyword)){ //$keyword = ""; echo('[err]未输入标题[/err]'); exit; } //$keyword = stripslashes($keyword); //$keyword = ereg_replace("[\|\"\r\n\t%\*\?\(\)\$;,'%-]"," ",trim($keyword)); /* if( ($cfg_notallowstr!='' && eregi($cfg_notallowstr,$keyword)) || ($cfg_replacestr!='' && eregi($cfg_replacestr,$keyword)) ){ echo "你的信息中存在非法内容,被系统禁止![返回]"; exit(); } if($keyword==""||strlen($keyword)<3){ ShowMsg("关键字不能小于3个字节!","-1"); exit(); } if(empty($starttime)||$starttime==-1) $starttime = -1; else //开始时间 { $starttime = ereg_replace("[^0-9]","",$starttime); if($starttime>0){ $dayst = GetMkTime("2006-1-2 0:0:0") - GetMkTime("2006-1-1 0:0:0"); $starttime = mytime() - ($starttime * $dayst); } } */ $starttime = -1; $sp = new SearchView($typeid,$keyword,$orderby,$channeltype,$searchtype,$starttime,$pagesize,$kwtype); if ($sp->TotalResult>0) { echo('1'); }else{ echo('0'); } $sp->Close(); ?>