www.gusucode.com > 08CMS空白站群系统 3.3 繁体 UTF-8 > upload/include/list.cls.php

    <?
include_once M_ROOT.'./include/archive.fun.php';
class cls_list{
	var $tmode = 'c';
	var $tclass = '';
	var $tname = '';
	var $tag = array();
	var $items = array();
	var $nowpage = 1;
	var $temparr = array();
	var $midarr = array();
	var $item = array();
	var $no_ctag = 0;//是否要解析标识内的c标记
	var $ret_null = 0;//当标识内容为空时,整个标识返回空
	var $cell_fill = 0;
	function __construct(){
		$this->cls_list();
	}
	function cls_list(){
	}
	function parse($tname,&$tag,&$temparr,$tmode='c'){
		$this->tmode = $tmode;
		$this->tname = $tname;
		$this->temparr = $temparr;
		$this->nowpage = empty($temparr['nowpage']) ? 1 : intval(max(1,$temparr['nowpage']));
		$this->tag = &$tag;
		$this->tclass = $this->tag['tclass'];
		$this->pre_deal();
		if($this->ret_null) return '';
		$result = $this->layout();
		return $result;
	}
	function layout(){
		$template = $this->tag['template'];
		$icount = min($this->temparr['limits'],count($this->items));
		list($rowblock,$colblock) = $this->fetch_block($template);
		$colcount = empty($colblock) ? 1 : (empty($this->tag['cols']) ? 1 : $this->tag['cols']);
		$rowcount = ceil($icount / $colcount);
		$newrows = $newcols = $newrow = '';
		for($i = 0;$i < $colcount*$rowcount;$i++){//如果是空集以下的操作跳过
			$filled = isset($this->items[$i]);
			$this->item = $filled ? $this->items[$i] : array();
			$this->item['sn_cell'] = $i + 1;//在列表中以原始数据来解析当前的单元序号
			$filled ? $this->deal_incell() : $this->fill_blank();
			if($colblock){
				if($filled || $this->cell_fill){
					$newcol = $colblock;
					!$this->no_ctag && nreplace($newcol,'c',$this->midarr);//单元内的c标识
					nreplace($newcol,'u',$this->item);
					nreplace($newcol,'b',$this->item);
				}else{
					$newcol = '';
				}
				$newcols .= $newcol;
				if(!(($i+1) % $colcount)){
					$this->item['sn_row'] = ceil(($i + 1) / $colcount);//在列表中以原始数据来解析当前的行序号
					$newrow = $this->block_replace('col',$newcols,$rowblock);
					//$newrow = preg_replace("/\[col\](.+?)\[\/col\]/is",$newcols,$rowblock);
					!$this->no_ctag && nreplace($newrow,'c',$this->temparr);//单元外的c标识
					$sitem = array();
					nreplace($newrow,'u',$sitem);
					nreplace($newrow,'b',$sitem);
					$newrows .= $newrow;
					$newcols = $newrow = '';
				}
			}else{
				$this->item['sn_row'] = $i + 1;//在列表中以原始数据来解析当前的行序号
				$newrow = $rowblock;
				!$this->no_ctag && nreplace($newrow,'c',$this->midarr);//单元内的c标识
				nreplace($newrow,'u',$this->item);
				nreplace($newrow,'b',$this->item);
				$newrows .= $newrow;
				$newrow = '';
			}
		}
		$template = $this->block_replace('row',$newrows,$template);
		!$this->no_ctag && nreplace($template,'c',$this->temparr);
		nreplace($template,'u',$this->temparr);
		nreplace($template,'b',$this->temparr);
		return $template;
	}
	function fetch_block($template){//将内嵌的c,u标识用临时符号取代,得到行列块之后,再替换回去。
		if(preg_match_all("/\{(u|c)\\$(.+?)\s+(.*?)\{\/\\1\\$\\2\}/is",$template,$matches)){
			foreach($matches[0] as $k => $v) $template = str_replace($v,'{{'.$matches[1][$k].'-'.$matches[2][$k].'}}',$template);
		}
		$rets = array();
		$rets[0] = preg_match("/\[row\](.+?)\[\/row\]/is",$template,$smatches) ? $smatches[1] : $template;
		$rets[1] = preg_match("/\[col\](.+?)\[\/col\]/is",$rets[0],$smatches) ? $smatches[1] : '';
		if(!empty($matches)){
			foreach($matches[0] as $k => $v){
				$rets[0] = str_replace('{{'.$matches[1][$k].'-'.$matches[2][$k].'}}',$v,$rets[0]);
				$rets[1] = str_replace('{{'.$matches[1][$k].'-'.$matches[2][$k].'}}',$v,$rets[1]);
			}
		}
		unset($matches,$smatches,$template);
		return $rets;
	}
	function block_replace($mode='row',&$tostr,$template){//将内嵌的c,u标识去除后替换其中行列内容块
		if(preg_match_all("/\{(u|c)\\$(.+?)\s+(.*?)\{\/\\1\\$\\2\}/is",$template,$matches)){
			foreach($matches[0] as $k => $v) $template = str_replace($v,'',$template);
		}
		if($mode == 'row'){
			$ret = preg_match("/\[row\](.+?)\[\/row\]/is",$template) ? preg_replace("/\[row\](.+?)\[\/row\]/is",$tostr,$template) : $tostr;
		}else $ret = preg_replace("/\[col\](.+?)\[\/col\]/is",$tostr,$template);
		unset($matches,$template);
		return $ret;
	}
	function pre_deal(){
		$this->temparr['limits'] = empty($this->tag['limits']) ? 10 : $this->tag['limits'];
		switch($this->tclass){
			case 'archives':
				global $db,$tblprefix;
				if($sqlstr = arc_sqlstr($this->tag,$this->temparr,$this->tmode)){
					$sqlstr .= " LIMIT ".($this->tmode == 'p' ? ($this->nowpage - 1) * $this->temparr['limits'] : (empty($this->tag['startno']) ? 0 : $this->tag['startno'])).",".$this->temparr['limits'];
					$query = $db->query($sqlstr);
					while($archive = $db->fetch_array($query)){
						arc_parse($archive);
						$this->items[] = $archive;
					}
				}
			break;
			case 'sarchives'://跨站文档列表,需要切换子站缓存
				global $db,$tblprefix,$cotypes,$channels,$ncache;
				if($sqlstr = sarc_sqlstr($this->tag,$this->temparr,$this->tmode)){
					$nsid = $this->tag['nsid'];
					if($nsid == -1){
						if(!isset($this->temparr['nsid'])) return false;
						$nsid = $this->temparr['nsid'];
					}
					$ncache->active($nsid);
					$sqlstr .= " LIMIT ".($this->tmode == 'p' ? ($this->nowpage - 1) * $this->temparr['limits'] : (empty($this->tag['startno']) ? 0 : $this->tag['startno'])).",".$this->temparr['limits'];
					$query = $db->query($sqlstr);
					while($archive = $db->fetch_array($query)){
						$ncache->active($archive['sid']);
						$archive['arcurl'] = view_arcurl($archive);
						$archive['catalog'] = @!empty($ncache->catalogs[$archive['caid']]['title']) ? $ncache->catalogs[$archive['caid']]['title'] : '';
						$archive['channel'] = @$channels[$archive['chid']]['cname'];
						$archive['altype'] = $archive['atid'] ? $ncache->altypes[$archive['atid']]['cname'] : '';
						foreach($cotypes as $k => $cotype){
							$archive['cotype'.$k.'title'] = '';
							if($archive["cotype$k"]){
								$coclasses = read_cache('coclasses',$k);
								$archive['cotype'.$k.'title'] = $coclasses[$archive["cotype$k"]]['title'];
							}
						}
						fetch_txt($archive);
						arr_tag2atm($archive);
						$this->items[] = $archive;
					}
				}
			break;
			case 'alarchives'://辑内文档列表
				global $db,$tblprefix;
				if($sqlstr = alarc_sqlstr($this->tag,$this->temparr,$this->tmode)){
					$sqlstr .= " LIMIT ".(($this->tmode == 'p') ? (($this->nowpage - 1) * $this->temparr['limits']) : (empty($this->tag['startno']) ? 0 : $this->tag['startno'])).",".$this->temparr['limits'];
					$query = $db->query($sqlstr);
					while($archive = $db->fetch_array($query)){
						arc_parse($archive);
						$this->items[] = $archive;
					}
				}
			break;
			case 'functions'://自定函数列表
				$this->temparr['nowpage'] = $this->nowpage;
				$this->items = functions_arr($this->tag,$this->temparr,$this->tmode);
			break;
			case 'relates'://相关文档列表
				global $db,$tblprefix;
				if($sqlstr = rel_sqlstr($this->tag,$this->temparr,$this->tmode)){
					$sqlstr .= " LIMIT ".(($this->tmode == 'p') ? (($this->nowpage - 1) * $this->temparr['limits']) : 0).",".$this->temparr['limits'];
					$query = $db->query($sqlstr);
					while($archive = $db->fetch_array($query)){
						arc_parse($archive);
						$this->items[] = $archive;
					}
				}
			break;
			case 'farchives'://附属信息列表
				global $db,$tblprefix;
				if($sqlstr = farc_sqlstr($this->tag,$this->temparr,$this->tmode)){
					$sqlstr .= " LIMIT ".(($this->tmode == 'p') ? (($this->nowpage - 1) * $this->temparr['limits']) : (empty($this->tag['startno']) ? 0 : $this->tag['startno'])).",".$this->temparr['limits'];
					$query = $db->query($sqlstr);
					while($row = $db->fetch_array($query)){
						$row['arcurl'] = view_farcurl($row['aid'],$row['arcurl']);
						arr_tag2atm($row,'f');
						$this->items[] = $row;
					}
				}
			break;
			case 'commus'://交互记录列表
				global $db,$tblprefix,$commus,$fields,$curuser;
				if($sqlstr = cu_sqlstr($this->tag,$this->temparr,$this->tmode)){
					$sqlstr .= " LIMIT ".(($this->tmode == 'p') ? (($this->nowpage - 1) * $this->temparr['limits']) : 0).",".$this->temparr['limits'];
					$query = $db->query($sqlstr);
					while($row = $db->fetch_array($query)){
						$this->items[] = $row;
					}
					unset($aedit);
				}
				$this->no_ctag = 1;
			break;
			case 'members'://会员列表
				global $db,$tblprefix;
				if($sqlstr = mem_sqlstr($this->tag,$this->temparr,$this->tmode)){
					$sqlstr .= " LIMIT ".(($this->tmode == 'p') ? (($this->nowpage - 1) * $this->temparr['limits']) : 0).",".$this->temparr['limits'];
					$query = $db->query($sqlstr);
					while($row = $db->fetch_array($query)){
						$this->items[] = $row;
					}
				}
				$this->no_ctag = 1;
			break;
			case 'searchs'://搜索文档列表
				global $db,$tblprefix;
				if($this->tmode == 'c'){//可以引用$timestamp及其它公用参数
					$sqlstr = "SELECT a.* ";
					$this->tag['sqlstr'] = stripslashes(str_replace('{$tblprefix}',$tblprefix,$this->tag['sqlstr']));
					$this->tag['sqlstr'] = sqlstr_replace($this->tag['sqlstr'],$this->temparr);
				}else $sqlstr = empty($this->tag['detail']) || empty($this->temparr['chid']) ? "SELECT a.* " : "SELECT a.*,c.*";
				$sqlstr .= ($this->tmode == 'p' ? $this->temparr['sqlstr'] : $this->tag['sqlstr'])." LIMIT ".($this->tmode == 'p' ? ($this->nowpage - 1) * $this->temparr['limits'] : 0).",".$this->temparr['limits'];
				$query = $db->query($sqlstr);
				while($archive = $db->fetch_array($query)){
					arc_parse($archive);
					$this->items[] = $archive;
				}
			break;
			case 'outinfos'://自由调用列表
				$this->items = outinfos_arr($this->tag,$this->temparr,$this->tmode,$this->nowpage);
			break;
			case 'catalogs'://类目列表
				global $catalogs,$cotypes,$sid;
				if($this->tag['listby'] == 'ca'){
					$caids = array();
					if(empty($this->tag['casource'])){
						foreach($catalogs as $k => $v){
							!$v['level'] && $caids[] = $k;
						}
					}elseif($this->tag['casource'] == 1){
						!empty($this->tag['caids']) && $caids = explode(',',$this->tag['caids']);
					}elseif(($this->tag['casource'] == 2) && !empty($this->temparr['caid'])){
						foreach($catalogs as $k => $v) {
							($v['pid'] == $this->temparr['caid']) && $caids[] = $k;
						}
					}elseif(($this->tag['casource'] == 3) && !empty($this->temparr['caid'])){
						foreach($catalogs as $k => $v){
							$v['pid'] == $catalogs[$this->temparr['caid']]['pid'] && $caids[] = $k;
						}	
					}
					foreach($caids as $caid){
						if($catalog = read_cache('catalog',$caid,'',$sid)) $this->items[] = $catalog;
					}
				}else{
					$coid = str_replace('co','',$this->tag['listby']);
					if(!$coclasses = read_cache('coclasses',$coid)) return;
					$ccids = array();
					if(empty($this->tag['cosource'.$coid])){
						foreach($coclasses as $k => $v){
							!$v['level'] && $ccids[] = $k;
						}
					}elseif($this->tag['cosource'.$coid] == 1 && !empty($this->tag['ccids'.$coid])){
						$ccids = explode(',',$this->tag['ccids'.$coid]);
					}elseif($this->tag['cosource'.$coid] == 2 && !empty($this->temparr['ccid'.$coid])){
						foreach($coclasses as $k => $v){
							$v['pid'] == $this->temparr['ccid'.$coid] && $ccids[] = $k;
						}
					}elseif(($this->tag['cosource'.$coid] == 3) && !empty($this->temparr['ccid'.$coid])){
						foreach($coclasses as $k => $v){
							$v['pid'] == $coclasses[$this->temparr['ccid'.$coid]]['pid'] && $ccids[] = $k;
						}	
					}
					foreach($ccids as $ccid){
						($coclass = read_cache('coclass',$coid,$ccid)) && $this->items[] = $coclass;
					}
				}
				unset($catalog,$coclasses,$coclass);
			break;
			case 'scatalogs'://跨站类目列表
				global $cotypes,$sid,$ncache;
				if($this->tag['listby'] == 'ca'){
					$nsid = $this->tag['nsid'];
					if($nsid == -1){
						if(!isset($this->temparr['nsid'])) return false;
						$nsid = $this->temparr['nsid'];
					}
					$ncache->active($nsid);
					$caids = array();
					if(empty($this->tag['casource'])){
						foreach($ncache->catalogs as $k => $v){
							!$v['level'] && $caids[] = $k;
						}
					}elseif($this->tag['casource'] == 1){
						!empty($this->tag['caids']) && $caids = explode(',',$this->tag['caids']);
					}elseif(($this->tag['casource'] == 2) && !empty($this->temparr['caid'])){
						foreach($ncache->catalogs as $k => $v){
							$v['pid'] == $this->temparr['caid'] && $caids[] = $k;
						}
					}elseif(($this->tag['casource'] == 3) && !empty($this->temparr['caid'])){
						foreach($ncache->catalogs as $k => $v){
							$v['pid'] == $ncache->catalogs[$this->temparr['caid']]['pid'] && $caids[] = $k;
						}	
					}
					foreach($caids as $caid){
						if($catalog = read_cache('catalog',$caid,'',$ncache->catalogs[$caid]['sid'])) $this->items[] = $catalog;
					}
				}else{
					$coid = str_replace('co','',$this->tag['listby']);
					if(!$coclasses = read_cache('coclasses',$coid)) return;
					$ccids = array();
					if(empty($this->tag['cosource'.$coid])){
						foreach($coclasses as $k => $v){
							!$v['level'] && $ccids[] = $k;
						}
					}elseif($this->tag['cosource'.$coid] == 1 && !empty($this->tag['ccids'.$coid])){
						$ccids = explode(',',$this->tag['ccids'.$coid]);
					}elseif($this->tag['cosource'.$coid] == 2 && !empty($this->temparr['ccid'.$coid])){
						foreach($coclasses as $k => $v){
							$v['pid'] == $this->temparr['ccid'.$coid] && $ccids[] = $k;
						}
					}elseif(($this->tag['cosource'.$coid] == 3) && !empty($this->temparr['ccid'.$coid])){
						foreach($coclasses as $k => $v){
							$v['pid'] == $coclasses[$this->temparr['ccid'.$coid]]['pid'] && $ccids[] = $k;
						}	
					}
					foreach($ccids as $ccid){
						($coclass = read_cache('coclass',$coid,$ccid)) && $this->items[] = $coclass;
					}
				}
				unset($catalog,$coclasses,$coclass);
			break;
			case 'mcatalogs';//会员空间的类目列表
				global $catalogs,$cotypes,$uclasses;
				if($this->tag['listby'] == 'ca'){
					$caids = array();
					if(empty($this->tag['casource'])){
						foreach($catalogs as $k => $v){
							!$v['level'] && $caids[] = $k;
						}
					}elseif($this->tag['casource'] == 1){
						!empty($this->tag['caids']) && $caids = explode(',',$this->tag['caids']);
					}elseif(($this->tag['casource'] == 2) && !empty($this->temparr['caid'])){
						foreach($catalogs as $k => $v) {
							($v['pid'] == $this->temparr['caid']) && $caids[] = $k;
						}
					}elseif(($this->tag['casource'] == 3) && !empty($this->temparr['caid'])){
						foreach($catalogs as $k => $v){
							$v['pid'] == $catalogs[$this->temparr['caid']]['pid'] && $caids[] = $k;
						}	
					}
					foreach($caids as $caid){
						($catalog = read_cache('catalog',$caid)) && $this->items[] = $catalog;
					}
				}elseif($coid = str_replace('co','',$this->tag['listby'])){
					if(!$coclasses = read_cache('coclasses',$coid)) return;
					$ccids = array();
					if(empty($this->tag['cosource'.$coid])){
						foreach($coclasses as $k => $v){
							!$v['level'] && $ccids[] = $k;
						}
					}elseif(($this->tag['cosource'.$coid] == 1) && !empty($this->tag['ccids'.$coid])){
						$ccids = explode(',',$this->tag['ccids'.$coid]);
					}elseif(($this->tag['cosource'.$coid] == 2) && !empty($this->temparr['ccid'.$coid])){
						foreach($coclasses as $k => $v){
							($v['pid'] == $this->temparr['ccid'.$coid]) && $ccids[] = $k;
						}
					}elseif(($this->tag['cosource'.$coid] == 3) && !empty($this->temparr['ccid'.$coid])){
						foreach($coclasses as $k => $v){
							$v['pid'] == $coclasses[$this->temparr['ccid'.$coid]]['pid'] && $ccids[] = $k;
						}	
					}
					foreach($ccids as $ccid){
						($coclass = read_cache('coclass',$coid,$ccid)) && $this->items[] = $coclass;
					}
				}elseif($this->tag['listby'] == 'uc'){
					$this->items = $uclasses;
				} 
				unset($catalog,$coclasses,$coclass);
			break;
			case 'vote'://投票模块
				global $db,$tblprefix,$timestamp;
				$this->no_ctag = 1;
				$vid = empty($this->tag['vid']) ? (empty($this->temparr['vid']) ? 0 : $this->temparr['vid']) : $this->tag['vid'];
				if(!$vid){
					$this->ret_null = 1;
					return;
				}
				if(!($vote = $db->fetch_one("SELECT * FROM {$tblprefix}votes WHERE vid='$vid' AND checked=1 AND (enddate=0 OR enddate>$timestamp)"))){
					$this->ret_null = 1;
					return;
				}
				$vote['content'] = mnl2br($vote['content']);
				foreach(array('vid','subject','content','totalnum','enddate','mid','mname','createdate') as $var){
					$this->temparr[$var] = $vote[$var];
				}
				$query = $db->query("SELECT * FROM {$tblprefix}voptions WHERE vid='$vid' ORDER BY vieworder,vopid");
				while($item = $db->fetch_array($query)){
					$item['input'] = !$vote['ismulti'] ? "<input type=\"radio\" value=\"".$item['vopid']."\" name=\"vopids[]\">" : "<input type=\"checkbox\" value=\"".$item['vopid']."\" name=\"vopids[]\">";
					$item['percent'] = $vote['totalnum'] ? @round($item['votenum'] / $vote['totalnum'],3) : 0;
					$item['percent'] = ($item['percent'] * 100).'%';
					$this->items[] = $item;
				}
				unset($vote,$item);
			break;
			case 'votes'://投票列表
				global $db,$tblprefix;
				if($sqlstr = v_sqlstr($this->tag,$this->tmode)){
					$sqlstr .= " LIMIT ".(($this->tmode == 'p') ? (($this->nowpage - 1) * $this->temparr['limits']) : 0).",".$this->temparr['limits'];
					$query = $db->query($sqlstr);
					while($item = $db->fetch_array($query)){
						$this->items[] = $item;
					}
				}
			break;
			case 'images'://有分页
				$tempfiles = @array_slice(unserialize($this->temparr[$this->tag['tname']]),($this->nowpage - 1) * $this->temparr['limits'],$this->temparr['limits']);
				if(!empty($tempfiles)){
					foreach($tempfiles as $v){
						$item = array();
						$item['url'] = view_atmurl($v['remote']);
						$item['url_s'] = view_thumburl($v['remote']);
						$item['title'] = $v['title'];
						$item['width'] = empty($v['width']) ? 0 : $v['width'];
						$item['height'] = empty($v['height']) ? 0 : $v['height'];
						$this->items[] = $item;
					}
				}
				unset($tempfiles,$v,$item);
				$this->no_ctag = 1;
			break;
			case 'files':
				$tempfiles = @marray_slice(unserialize($this->temparr[$this->tag['tname']]),0,$this->temparr['limits']);
				if(!empty($tempfiles)){
					foreach($tempfiles as $k => $v){
						$item = array();
						$item['fid'] = $k;
						$item['url'] = view_atmurl($v['remote']);
						$item['title'] = $v['title'];
						!empty($this->temparr['aid']) && $item['aid'] = $this->temparr['aid'];
						$item['tname'] = $this->tag['tname'];
						$this->items[] = $item;
					}
				}
				unset($tempfiles,$v,$item);
				$this->no_ctag = 1;
			break;
			case 'medias':
				$tempfiles = @marray_slice(unserialize($this->temparr[$this->tag['tname']]),0,$this->temparr['limits']);
				if(!empty($tempfiles)){
					foreach($tempfiles as $k => $v){
						$item = array();
						$item['fid'] = $k;
						$item['url'] = view_atmurl($v['remote']);
						$item['title'] = $v['title'];
						$item['player'] = empty($v['player']) ? 0 : $v['player'];
						!empty($this->temparr['aid']) && $item['aid'] = $this->temparr['aid'];
						$item['tname'] = $this->tag['tname'];
						$this->items[] = $item;
					}
				}
				unset($tempfiles,$v,$item);
				$this->no_ctag = 1;
			break;
			case 'flashs':
				$tempfiles = @marray_slice(unserialize($this->temparr[$this->tag['tname']]),0,$this->temparr['limits']);
				if(!empty($tempfiles)){
					foreach($tempfiles as $k => $v){
						$item = array();
						$item['fid'] = $k;
						$item['url'] = view_atmurl($v['remote']);
						$item['title'] = $v['title'];
						$item['player'] = empty($v['player']) ? 0 : $v['player'];
						!empty($this->temparr['aid']) && $item['aid'] = $this->temparr['aid'];
						$item['tname'] = $this->tag['tname'];
						$this->items[] = $item;
					}
				}
				unset($tempfiles,$v,$item);
				$this->no_ctag = 1;
			break;
			case 'arcfee':
				$temps = fee_arr($this->tag,$this->temparr);
				empty($temps) && $this->ret_null = 1;
				foreach($temps as $k => $v){
					$this->items[] = $v;
				}
				unset($temps,$v);
				$this->no_ctag = 1;
			break;
			case 'keywords':
				global $wordlinks;
				load_cache('wordlinks');
				if(empty($wordlinks)) return;
				$temps = @marray_slice($wordlinks,0,$this->temparr['limits']);
				foreach($temps['swords'] as $k =>$v){
					$this->items[] = array('word' => $v,'wordlink' => $temps['rwords'][$k]);
				}
				unset($temps,$k,$v);
				$this->no_ctag = 1;
			break;
			case 'subsites':
				global $subsites,$cmsname;
				if(empty($this->tag['source']) || (($this->tag['source'] == 2) && in_array('0',$this->tag['sids']))){
					$this->items[] = array('sid' => 0,'siteurl' => view_siteurl(0),'sitename' => $cmsname);
				}
				$i = 1;
				foreach($subsites as $k => $v){
					if($i > $this->temparr['limits']) break;
					if(($this->tag['source'] < 2) || (($this->tag['source'] == 2) && in_array($k,explode(',',$this->tag['sids'])))){
						$this->items[] = array('sid' => $k,'siteurl' => view_siteurl($k),'sitename' => $v['sitename']);
						$i ++;
					}
				}
			break;
			case 'channels':
				global $channels;
				if(empty($channels) || (!empty($this->tag['chsource']) && empty($this->tag['chids']))) return;
				$i = 1;
				foreach($channels as $k => $v){
					if($i > $this->temparr['limits']) break;
					if(empty($this->tag['chsource']) || (!empty($this->tag['chsource']) && in_array($k,explode(',',$this->tag['chids'])))){
						$this->items[] = array('chid' => $k,'title' => $v['cname']);
						$i ++;
					}
				}
			break;
			case 'mchannels':
				global $mchannels;
				if(empty($mchannels) || (!empty($this->tag['chsource']) && empty($this->tag['chids']))) return;
				$i = 1;
				foreach($mchannels as $k => $v){
					if($i > $this->temparr['limits']) break;
					if(empty($this->tag['chsource']) || (!empty($this->tag['chsource']) && in_array($k,explode(',',$this->tag['chids'])))){
						$this->items[] = array('mchid' => $k,'title' => $v['cname']);
						$i ++;
					}
				}
			break;
		}
	}
	function fill_blank(){
		if($this->tclass == 'images'){
			$this->item['url'] = $this->item['url_s'] = view_atmurl($this->tag['emptyurl']);
			$this->item['width'] = $this->tag['maxwidth'];
			$this->item['height'] = $this->tag['maxheight'];
			$this->cell_fill = 1;
		}
	}
	function deal_incell(){
		if(in_array($this->tclass,array('archives','sarchives','searchs','alarchives','relates'))){
			global $catalogs,$cotypes;
			$this->midarr = $this->temparr;
			$this->midarr['aid'] = $this->item['aid'];
			$this->midarr['caid'] = $this->item['caid'];
			foreach($cotypes as $k => $cotype){
				if($cotype['sortable'] && !empty($this->item["cotype$k"])){
					$this->midarr['ccid'.$k] = $this->item["cotype$k"];
				}
			}
			$this->midarr['atid'] = $this->item['atid'];
			$this->midarr['mid'] = $this->item['mid'];
		}elseif($this->tclass == 'farchives'){
			$this->midarr['aid'] = $this->item['aid'];
			$this->midarr['mid'] = $this->item['mid'];
		}elseif($this->tclass == 'outinfos'){
			if(!empty($this->tag['relays'])){
				$relays = explode(',',$this->tag['relays']);
				foreach($relays as $v) $this->midarr[$v] = isset($this->item[$v]) ? $this->item[$v] : '';
				unset($relays);
			}
		}elseif($this->tclass == 'marchives'){
			$this->midarr = $this->temparr;
			$this->midarr['caid'] = $this->item['caid'];
			$this->midarr['ucid'] = $this->item['ucid'];
		}elseif($this->tclass == 'catalogs'){
			global $cotypes,$sid;
			parse_str(cnstr($this->temparr),$this->midarr);
			foreach($this->midarr as $k => $v){//读取继承参数
				if($k == 'caid'){
					if(@$this->tag['cainherit'] != 'active') unset($this->midarr[$k]);
				}else{
					if(@$this->tag['coinherit'.str_replace('ccid','',$k)] != 'active') unset($this->midarr[$k]);
				}
			}
			if($this->tag['listby'] == 'ca'){//先处理非列表项目,因为列表项id要放在最后
				foreach($cotypes as $k => $v){//读取手动指定的参数
					($v['sortable'] && !empty($this->tag['coinherit'.$k]) && is_numeric($this->tag['coinherit'.$k])) && $this->midarr['ccid'.$k] = $this->tag['coinherit'.$k];
				}
				unset($this->midarr['caid']);//将列表项的参数放在最后
				$this->midarr['caid'] = $this->item['caid'];
			}elseif($coid = str_replace('co','',$this->tag['listby'])){
				(!empty($this->tag['cainherit']) && is_numeric($this->tag['cainherit'])) && $this->midarr['caid'] = $this->tag['cainherit'];
				foreach($cotypes as $k => $v){
					(($k != $coid) && $v['sortable'] && !empty($this->tag['coinherit'.$k]) && is_numeric($this->tag['coinherit'.$k])) && $this->midarr['ccid'.$k] = $this->tag['coinherit'.$k];
				}
				unset($this->midarr['ccid'.$coid]);
				$this->midarr['ccid'.$coid] = $this->item['ccid'];
			}
			(!empty($this->tag['urlmode']) && !empty($this->midarr[$this->tag['urlmode']])) && $this->midarr = array_merge(array($this->tag['urlmode'] => $this->midarr[$this->tag['urlmode']]),$this->midarr);
			$cnstr = cnstr($this->midarr);
			$cnode = cnodearr($cnstr,$sid);
			re_cnode($this->item,$cnstr,$cnode);
			unset($cnode);
		}elseif($this->tclass == 'scatalogs'){
			global $cotypes,$sid;
			parse_str(cnstr($this->temparr),$this->midarr);
			foreach($this->midarr as $k => $v){//读取继承参数
				if($k == 'caid'){
					if($this->tag['cainherit'] != 'active') unset($this->midarr[$k]);
				}else{
					if(@$this->tag['coinherit'.str_replace('ccid','',$k)] != 'active') unset($this->midarr[$k]);
				}
			}
			if($this->tag['listby'] == 'ca'){//先处理非列表项目,因为列表项id要放在最后
				foreach($cotypes as $k => $v){//读取手动指定的参数
					($v['sortable'] && !empty($this->tag['coinherit'.$k]) && is_numeric($this->tag['coinherit'.$k])) && $this->midarr['ccid'.$k] = $this->tag['coinherit'.$k];
				}
				unset($this->midarr['caid']);//将列表项的参数放在最后
				$this->midarr['caid'] = $this->item['caid'];
			}elseif($coid = str_replace('co','',$this->tag['listby'])){
				(!empty($this->tag['cainherit']) && is_numeric($this->tag['cainherit'])) && $this->midarr['caid'] = $this->tag['cainherit'];
				foreach($cotypes as $k => $v){
					(($k != $coid) && $v['sortable'] && !empty($this->tag['coinherit'.$k]) && is_numeric($this->tag['coinherit'.$k])) && $this->midarr['ccid'.$k] = $this->tag['coinherit'.$k];
				}
				unset($this->midarr['ccid'.$coid]);
				$this->midarr['ccid'.$coid] = $this->item['ccid'];
			}
			(!empty($this->tag['urlmode']) && !empty($this->midarr[$this->tag['urlmode']])) && $this->midarr = array_merge(array($this->tag['urlmode'] => $this->midarr[$this->tag['urlmode']]),$this->midarr);
			//求nsid
			$nsid = $this->tag['nsid'];
			if($nsid == -1){
				if(!isset($this->temparr['nsid'])) return false;
				$nsid = $this->temparr['nsid'];
			}
			$cnstr = cnstr($this->midarr);
			$cnode = cnodearr($cnstr,$nsid);
			re_cnode($this->item,$cnstr,$cnode);
			$this->itme['nsid'] = $nsid;
			unset($cnode);
		}elseif($this->tclass == 'mcatalogs'){
			$this->midarr = $this->temparr;
			if($this->tag['listby'] == 'ca'){
				$this->midarr['caid'] = $this->item['caid'];
				$this->item['indexurl'] = mcn_url('caid',$this->item['caid'],'index');
				$this->item['listurl'] = mcn_url('caid',$this->item['caid'],'list');
			}elseif(preg_match("/^co(\d+)/is",$this->tag['listby'],$matches)){
				$coid = $matches[1];
				$this->midarr['ccid'.$coid] = $this->item['ccid'];
				$this->item['indexurl'] = mcn_url('ccid'.$coid,$this->item['ccid'],'index');
				$this->item['listurl'] = mcn_url('ccid'.$coid,$this->item['ccid'],'list');
			}elseif($this->tag['listby'] == 'uc'){
				$this->midarr['ucid'] = $this->item['ucid'];
				$this->item['indexurl'] = mcn_url('ucid',$this->item['ucid'],'index');
				$this->item['listurl'] = mcn_url('ucid',$this->item['ucid'],'list');
			}
		}elseif($this->tclass == 'images'){
			$wh = imagewh($this->item['url'],!empty($this->item['width']) ? $this->item['width'] : 0,!empty($this->item['height']) ? $this->item['height'] : 0,@$this->tag['maxwidth'],@$this->tag['maxheight'],@$this->tag['expand']);
			$this->item['width'] = $wh['width'];
			$this->item['height'] = $wh['height'];
		}elseif($this->tclass == 'channels'){
			$this->midarr = array('chid' => $this->item['chid']);
		}elseif($this->tclass == 'members'){
			global $grouptypes;
			foreach($grouptypes as $k => $v){
				$this->item['grouptype'.$k.'name'] = '';
				if(!empty($this->item['grouptype'.$k])){
					$usergroups = read_cache('usergroups',$k);
					$this->item['grouptype'.$k.'name'] = $usergroups[$this->item['grouptype'.$k]]['cname'];
				}
			}
			unset($usergroups,$v);
		}elseif($this->tclass == 'subsites'){
			$this->midarr['nsid'] = $this->item['sid'];
		}elseif($this->tclass == 'channels'){
			$this->midarr['chid'] = $this->item['chid'];
		}elseif($this->tclass == 'mchannels'){
			$this->midarr['mchid'] = $this->item['mchid'];
		}
	}
}
	
?>