| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207 | <?phpdefined('IN_PHPCMS') or exit('No permission resources.');//模型缓存路径define('CACHE_MODEL_PATH',CACHE_PATH.'caches_model'.DIRECTORY_SEPARATOR.'caches_data'.DIRECTORY_SEPARATOR);pc_base::load_app_func('util','content');class search {	private $db;	function __construct() {		$this->db = pc_base::load_model('content_model');	}	/**	 * 按照模型搜索	 */	public function init() {		$grouplist = getcache('grouplist','member');		$_groupid = param::get_cookie('_groupid');		if(!$_groupid) $_groupid = 8;		if(!$grouplist[$_groupid]['allowsearch']) {			if ($_groupid==8) showmessage(L('guest_not_allowsearch')); 			else showmessage('');		}		if(!isset($_GET['catid'])) showmessage(L('missing_part_parameters'));		$catid = intval($_GET['catid']);		$siteids = getcache('category_content','commons');		$siteid = $siteids[$catid];		$this->categorys = getcache('category_content_'.$siteid,'commons');		if(!isset($this->categorys[$catid])) showmessage(L('missing_part_parameters'));		if(isset($_GET['info']['catid']) && $_GET['info']['catid']) {			$catid = intval($_GET['info']['catid']);		} else {			$_GET['info']['catid'] = 0;		}		$modelid = $this->categorys[$catid]['modelid'];		$modelid = intval($modelid);		if(!$modelid) showmessage(L('illegal_parameters'));		//搜索间隔		$minrefreshtime = getcache('common','commons');		$minrefreshtime = intval($minrefreshtime['minrefreshtime']);		$minrefreshtime = $minrefreshtime ? $minrefreshtime : 5;		if(param::get_cookie('search_cookie') && param::get_cookie('search_cookie')>SYS_TIME-2) {			showmessage(L('search_minrefreshtime',array('min'=>$minrefreshtime)),'index.php?m=content&c=search&catid='.$catid,$minrefreshtime*1280);		} else {			param::set_cookie('search_cookie',SYS_TIME+2);		}		//搜索间隔				$CATEGORYS = $this->categorys;		//产生表单		pc_base::load_sys_class('form','',0);		$fields = getcache('model_field_'.$modelid,'model');		$forminfos = array();		foreach ($fields as $field=>$r) {			if($r['issearch']) {				if($r['formtype']=='catid') {					$r['form'] = form::select_category('',$_GET['info']['catid'],'name="info[catid]"',L('please_select_category'),$modelid,0,1);				} elseif($r['formtype']=='number') {					$r['form'] = "<input type='text' name='{$field}_start' id='{$field}_start' value='' size=5 class='input-text'/> - <input type='text' name='{$field}_end' id='{$field}_start' value='' size=5 class='input-text'/>";				} elseif($r['formtype']=='datetime') {					$r['form'] = form::date("info[$field]");				} elseif($r['formtype']=='box') {					$options = explode("\n",$r['options']);					$option = array();					foreach($options as $_k) {						$v = explode("|",trim($_k));						$option[$v[1]] = $v[0];					}					switch($r['boxtype']) {						case 'radio':							$string = form::radio($option,$value,"name='info[$field]' id='$field'");						break;									case 'checkbox':							$string = form::radio($option,$value,"name='info[$field]' id='$field'");						break;									case 'select':							$string = form::select($option,$value,"name='info[$field]' id='$field'");						break;									case 'multiple':							$string = form::select($option,$value,"name='info[$field]' id='$field'");						break;					}					$r['form'] = $string;				} elseif($r['formtype']=='typeid') {					$types = getcache('type_content','commons');					$types_array = array(L('no_limit'));					foreach ($types as $_k=>$_v) {						if($modelid == $_v['modelid']) $types_array[$_k] = $_v['name'];					}					$r['form'] = form::select($types_array,0,"name='info[$field]' id='$field'");				} elseif($r['formtype']=='linkage') {					$setting = string2array($r['setting']);					$value = $_GET['info'][$field];					$r['form'] = menu_linkage($setting['linkageid'],$field,$value);				} elseif(in_array($r['formtype'], array('text','keyword','textarea','editor','title','author','omnipotent'))) {					$value = safe_replace($_GET['info'][$field]);					$r['form'] = "<input type='text' name='info[$field]' id='$field' value='".$value."' class='input-text search-text'/>";				} else {					continue;				}				$forminfos[$field] = $r;			}		}		//-----------		if(isset($_GET['dosubmit'])) {			$siteid = $this->categorys[$catid]['siteid'];			$siteurl = siteurl($siteid);			$this->db->set_model($modelid);			$tablename = $this->db->table_name;						$page = max(intval($_GET['page']), 1);			$sql  = "SELECT * FROM `{$tablename}` a,`{$tablename}_data` b WHERE a.id=b.id AND a.status=99";			$sql_count  = "SELECT COUNT(*) AS num FROM `{$tablename}` a,`{$tablename}_data` b WHERE a.id=b.id AND a.status=99";			//构造搜索SQL			$where = '';			foreach ($fields as $field=>$r) {				if($r['issearch']) {					$table_nickname = $r['issystem'] ? 'a' : 'b';					if($r['formtype']=='catid') {						if($_GET['info']['catid']) $where .= " AND {$table_nickname}.catid='$catid'";					} elseif($r['formtype']=='number') {						$start = "{$field}_start";						$end = "{$field}_end";						if($_GET[$start]) {							$start = intval($_GET[$start]);							$where .= " AND {$table_nickname}.{$field}>'$start'";						}						if($_GET[$end]) {							$end = intval($_GET[$end]);							$where .= " AND {$table_nickname}.{$field}<'$end'";						}					} elseif($r['formtype']=='datetime') {						if($_GET['info'][$field]) {							$start = strtotime($_GET['info'][$field]);							if($start) $where .= " AND {$table_nickname}.{$field}>'$start'";						}					} elseif($r['formtype']=='box') {						if($_GET['info'][$field]) {							$field_value = safe_replace($_GET['info'][$field]);							switch($r['boxtype']) {								case 'radio':									$where .= " AND {$table_nickname}.`$field`='$field_value'";								break;													case 'checkbox':									$where .= " AND {$table_nickname}.`$field` LIKE '%,$field_value,%'";								break;													case 'select':									$where .= " AND {$table_nickname}.`$field`='$field_value'";								break;													case 'multiple':									$where .= " AND {$table_nickname}.`$field` LIKE '%,$field_value,%'";								break;							}						}					} elseif($r['formtype']=='typeid') {						if($_GET['info'][$field]) {							$typeid = intval($_GET['info'][$field]);							$where .= " AND {$table_nickname}.`$field`='$typeid'";						}					} elseif($r['formtype']=='linkage') {						if($_GET['info'][$field]) {							$linkage = intval($_GET['info'][$field]);							$where .= " AND {$table_nickname}.`$field`='$linkage'";						}					} elseif(in_array($r['formtype'], array('text','keyword','textarea','editor','title','author','omnipotent'))) {						if($_GET['info'][$field]) {							$keywords = safe_replace($_GET['info'][$field]);							$where .= " AND {$table_nickname}.`$field` LIKE '%$keywords%'";						}					} else {						continue;					}				}			}			//-----------			if($where=='') showmessage(L('please_enter_content_to_search'));			$pagesize = 20;			$offset = intval($pagesize*($page-1));			$sql_count .= $where;			$this->db->query($sql_count);			$total = $this->db->fetch_array();			$total = $total[0]['num'];			if($total!=0) {				$sql .= $where;				$order = '';				$order = $_GET['orderby']=='a.id DESC' ? 'a.id DESC' : 'a.id ASC';				$sql .= ' ORDER BY '.$order;				$sql .= " LIMIT $offset,$pagesize";				$this->db->query($sql);				$datas = $this->db->fetch_array();				$pages = pages($total, $page, $pagesize);			} else {				$datas = array();				$pages = '';			}		}		$SEO = seo($siteid, $catid, $keywords);		include template('content','search');	}}?>
 |