⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 inc_arcsearch_view.php

📁 强大的PHP内容管理系统尽量不要让站长把时间都花费在为您修正说明上。压缩包解压
💻 PHP
📖 第 1 页 / 共 2 页
字号:
<?php
require_once(dirname(__FILE__)."/inc_typelink.php");
require_once(dirname(__FILE__)."/pub_dedetag.php");
require_once(dirname(__FILE__)."/pub_splitword_www.php");
/******************************************************
//Copyright 2004-2006 by DedeCms.com itprato
//本类的用途是用于文档搜索
******************************************************/
@set_time_limit(0);
//-----------------------
//搜索类
//-----------------------
class SearchView
{
	var $dsql;
	var $dtp;
	var $dtp2;
	var $TypeID;
	var $TypeLink;
	var $PageNo;
	var $TotalPage;
	var $TotalResult;
	var $PageSize;
	var $ChannelType;
	var $TempInfos;
	var $Fields;
	var $PartView;
	var $StartTime;
	var $Keywords;
	var $OrderBy;
	var $SearchType;
	var $KType;
	var $Keyword;
	var $TempletsFile;
	var $result;
	var $cacheid;
	//-------------------------------
	//php5构造函数
	//-------------------------------
	function __construct($typeid, $keyword, $achanneltype=0, $searchtype="title",$kwtype=0, $cacheid=0)
 	{
		$this->TypeID = $typeid;
		$this->Keyword = $keyword;
		$this->OrderBy = '#@__full_search.aid desc';
		$this->KType = $kwtype;
		$this->PageSize = 20;
		$this->ChannelType = $achanneltype;
		$this->TempletsFile = '';
		$this->SearchType = $searchtype;
		$this->result = '';
		$this->cacheid = $cacheid;

		$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);

 		//设置一些全局参数的值
 		foreach($GLOBALS['PubFields'] as $k=>$v) $this->Fields[$k] = $v;

 		if(isset($GLOBALS['PageNo'])) $this->PageNo = $GLOBALS['PageNo'];
 		else $this->PageNo = 1;
 		$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->TempletsFile = ereg_replace("^".$GLOBALS['cfg_basedir'],'',$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,$achanneltype=0,$searchtype="title",$kwtype=0, $cacheid=0)
  {
 		$this->__construct($typeid,$keyword,$achanneltype,$searchtype,$kwtype, $cacheid=0);
 	}
 	//---------------------------
 	//关闭相关资源
 	//---------------------------
 	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) > 16){
		      $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', '".time()."');
       ";
	     $this->dsql->ExecuteNoneQuery($inquery);
	  }else{
		   $this->dsql->ExecuteNoneQuery("Update #@__search_keywords set count=count+1,lasttime='".time()."' where keyword='".addslashes($keyword)."'; ");
		   $keywords = $row['spwords'];
	  }
	  return $keywords;
  }
 	//----------------
 	//获得关键字SQL
 	//----------------
  function GetKeywordSql()
 	{
 		$where = $where1 = array();

 		if($this->TypeID > 0){
 			$where[] = "#@__full_search.typeid={$this->TypeID}";
 		}
 		if(!empty($this->ChannelType)){
 			$where[] = "#@__full_search.channelid={$this->ChannelType}";
 		}

 		$ks = explode(' ',$this->Keywords);
 		sort($ks);
		reset ($ks);
		$wherearr = array();
 		foreach($ks as $k)
 		{
 			$kwsqlarr = array();
 			$k = trim($k);
 			if(strlen($k) < 3){
 				 continue;
 				 //echo '关键词过短,搜索程序终止程序执行';
 				 //exit;
 			}
 			$k = addslashes($k);

 			if($this->SearchType != "titlekeyword"){
 				$kwsqlarr[] = " #@__full_search.title like '%$k%' ";
 			}else{
			 	$kwsqlarr[] = " #@__full_search.title like '%$k%' ";
			 	$kwsqlarr[] = " #@__full_search.addinfos like '%$k%' ";
			 	$kwsqlarr[] = " #@__full_search.keywords like '%$k%' ";
			}
			$wherearr[] = '('.implode(' OR ',$kwsqlarr).')';
 		}
		if($this->KType==1){
			$where[] = '('.implode(' AND ',$wherearr).')';
		}else{
			$where[] = '('.implode(' OR ',$wherearr).')';
		}
		$wheresql = implode(' AND ',$where);

		$wheresql = 'arcrank > -1 and '.$wheresql;

 		return $wheresql;
 	}

 	//-------------------
 	//获得相关的关键字
 	//-------------------
 	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 .= ' <a href="search.php?keyword='.urlencode($row['keyword']).'"'.$style."><u>".$row['keyword']."</u></a> ";
 			}
 			return $likeword;
 		}
 	}
 	//----------------
 	//加粗关键字
 	//----------------
 	function GetRedKeyWord($fstr)
 	{
 		$ks = explode(" ",$this->Keywords);
 		$kwsql = "";
 		$words = array();
 		foreach($ks as $k){
 			$k = trim($k);
 			if($k=="") continue;
 			if(ord($k[0])>0x80 && strlen($k)<3) continue;
 			//$fstr = str_replace($k,"<font color='red'>$k</font>",$fstr);
 			$words[] = $k;
 		}
 		$fstr = highlight($fstr, $words);
 		return $fstr;
 	}
 	//------------------
 	//统计列表里的记录
 	//------------------
 	function CountRecord()
 	{
		global $cfg_search_maxlimit, $cfg_search_cachetime;
		$cfg_search_cachetime = max(1,intval($cfg_search_cachetime));
		$expiredtime = time() - $cfg_search_cachetime * 3600;
		if(empty($cfg_search_maxlimit)) $cfg_search_maxlimit = 500;
		if(empty($this->cacheid)){
			$where = $this->GetKeywordSql();
			$query = "Select aid from #@__full_search where $where limit $cfg_search_maxlimit";
			$md5 = md5($query);
			$timestamp = time();
			$cachequery = $this->dsql->getone("select * from #@__search_cache where md5='$md5' And addtime > $expiredtime limit 1");
			if(is_array($cachequery))
			{
				$nums = $cachequery['nums'];
				$result = $cachequery['result'];
				$this->result = $result;
				$this->TotalResult = $nums;
				$this->cacheid = $cachequery['cacheid'];
			}else{
				$this->dsql->SetQuery($query);
				$this->dsql->execute();
				$aidarr = array();
				$aidarr[] = 0;
				while($row = $this->dsql->getarray()){
					$aidarr[] = $row['aid'];
				}
				$nums = count($aidarr)-1;
				$aids = implode(',', $aidarr);
				$delete = "delete from #@__search_cache where addtime < $expiredtime;";
				$this->dsql->SetQuery($delete);
				$this->dsql->executenonequery();
				$insert = "insert into #@__search_cache(`nums`, `md5`, `result`, `usetime`, `addtime`)
				 values('$nums', '$md5', '$aids','$timestamp', '$timestamp')";

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -