List.src

class.list.php:

Unable to find source-code formatter for language: php. Available languages are: actionscript, html, java, javascript, none, sql, xhtml, xml
<?
/*
+------------------------------------------------------------------------------
* Filename: class.list.php
* Create Day: Tue Nov 30 00:41:23 GMT+08:00 2004
* @Author: xshArp@iZz Studio ( xsharp@justdn.com / http://www.justdn.org)
* =============================================================================
* Attention: 禁止未经我们允许的任何个人或商业使用!
* @copyright: iZz Studio 2000-2005
+------------------------------------------------------------------------------
*/

// @version: $Id: class.list.php 1357 2006-09-07 13:12:35Z xsharp $

include_once(dirname(__FILE__)."/taglib.php");

class tag_list extends taglib {
	var $sql_optimize = array();
	
	function main()
	{
		$this->template_use = 'list_';
		$this->news();
	}
	
	function init_c_rows(){
		if($this->tag_setting[mod] == 'down'){
			$this->c_rows   = action::unserialize_data($this->inews_conf['obj_down_cate_out_sort_c_id']);
		}else{
			$this->c_rows   = action::unserialize_data($this->inews_conf['obj_cate_sort_c_id']);
		}
	}
	
	function build_sql(){
		global $inews_database;
		$where = "";
		$group_by = "";
		$order_by = "";
		$select = $sql = "SELECT ";
		$select .= "m.*,l.c_id";
		$sql    .= "m.*,l.c_id";
		if($this->tag_setting[mod] == 'down'){
			$sql .= " FROM ".$this->dt->down_cate_link." l LEFT JOIN ".$this->dt->down." m ";
			$this->sql_optimize[main_cate_link] = $this->dt->down_cate_link;
			$this->sql_optimize[main] = $this->dt->down;
		}else{
			$sql .= " FROM ".$this->dt->main_cate_link." l LEFT JOIN ".$this->dt->main." m ";
			$this->sql_optimize[main_cate_link] = $this->dt->main_cate_link;
			$this->sql_optimize[main] = $this->dt->main;
		}
		$sql .= " ON(l.guid = m.guid) ";
		// 分类
		if(is_array($this->tag_setting[cid])){
			if(isset($this->tag_setting[with_sub])){
				$c_id_sub = $this->get_sub_cate($this->tag_setting[cid]);
				$where .= " WHERE l.status_id ='1' and l.c_id IN (".implode(',',$c_id_sub).") ";
				$sql   .= " WHERE l.status_id ='1' and l.c_id IN (".implode(',',$c_id_sub).") ";
			}else{
				$where .= " WHERE l.status_id ='1' and l.c_id IN (".implode(',',$this->tag_setting[cid]).")";
				$sql   .= " WHERE l.status_id ='1' and l.c_id IN (".implode(',',$this->tag_setting[cid]).")";
			}
		}else{
			if(isset($this->tag_setting[with_sub])){
				$c_id_sub = $this->get_sub_cate($this->tag_setting[cid]);
				$where .= " WHERE l.status_id ='1' and l.c_id IN (".implode(',',$c_id_sub).") ";
				$sql   .= " WHERE l.status_id ='1' and l.c_id IN (".implode(',',$c_id_sub).") ";
			}elseif($this->tag_setting[cid]>0){
				$where .= " WHERE l.status_id ='1' and l.c_id='".$this->tag_setting[cid]."' ";
				$sql   .= " WHERE l.status_id ='1' and l.c_id='".$this->tag_setting[cid]."' ";
			}else{
				$where .= " WHERE l.status_id ='1 ";
				$sql   .= " WHERE l.status_id ='1' ";
			}
		}
		if($this->tag_setting[o] == 'recommend'){
			$where .= " AND l.is_recommend='1' ";
			$sql   .= " AND l.is_recommend='1' ";
		} elseif ($this->tag_setting[o] == 'headline'){
			$where .= " AND l.is_headline='1' ";
			$sql   .= " AND l.is_headline='1' ";
		}
		if (isset($this->tag_setting[with_img] )){
			$where .= " AND m.image_url <>'' ";
			$sql   .= " AND m.image_url <>'' ";
		}
		

		// 定义模板
		$this->template_use.= ($this->tag_setting['skin'])?$this->tag_setting['skin']:'1';
		if(isset($this->tag_setting[no_filter])){
			$group_by .= " ";
			$sql      .= " ";
		}else{
			if($inews_database[db_type] == 'mysql' or $inews_database[db_type] == 'mysqli'){
				$group_by .= " GROUP BY guid ";
				$sql      .= " GROUP BY guid ";
			}else{
				// 尚不支持MSSQL等
			}
		}
		// 排序
		if(isset($this->tag_setting[sort])){
			$order_by .= " ORDER BY l.is_stick DESC,";
			$sql      .= " ORDER BY l.is_stick DESC,";
			if($this->tag_setting[sort] == 'title'){
				$order_by .= "m.title ";
				$sql      .= "m.title ";
				$this->tag_setting[order] = (!isset($this->tag_setting[order]))?'asc':$this->tag_setting[order];
			}elseif($this->tag_setting[sort] == 'id'){
				$order_by .= "m.id ";
				$sql      .= "m.id ";
			}elseif($this->tag_setting[sort] == 'datetime'){
				$order_by .= "l.datetime ";
				$sql      .= "l.datetime ";
			}elseif($this->tag_setting[sort] == 'author'){
				$order_by .= "m.author ";
				$sql      .= "m.author ";
			}elseif($this->tag_setting[sort] == 'editor'){
				$order_by .= "m.editor";
				$sql      .= "m.editor";
			}
		}else{
			$order_by .= " ORDER BY l.is_stick DESC,l.datetime ";
			$sql      .= " ORDER BY l.is_stick DESC,l.datetime ";
		}
		if (isset($this->tag_setting[order]) and strtolower($this->tag_setting[order])=='asc'){
			$order_by .= " ASC ";
			$sql      .= " ASC ";
		}else{
			$order_by .= " DESC ";
			$sql      .= " DESC ";
		}
		$this->sql_optimize[sql]      = $sql;
		$this->sql_optimize[select]   = $select;
		$this->sql_optimize[where]    = $where;
		$this->sql_optimize[group_by] = $group_by;
		$this->sql_optimize[order_by] = $order_by;
		
		return $sql;
	}
	
	function build_sql_sub($guids = array()){
		// 尚未实现该查询方法
		$sql_table = $this->sql_optimize;
		$table_main_cate_link = $sql_table[main_cate_link];
		$table_main           = $sql_table[main];
		$guids_str = "'".implode("','",$guids)."'";
		$c_id_rows = $this->db->GetAll("SELECT DISTINCT(l.c_id),l.guid FROM ".$table_main_cate_link." l WHERE guid IN(".$guids_str.")");
		foreach ($c_id_rows as $val){
			$this->guids_c_id["".$val[guid].""] = $val[c_id];
		}
		
		$select   = $this->sql_optimize[select];
		$where    = $this->sql_optimize[where];
		$order_by = $this->sql_optimize[order_by];

		//$tmp = explode(',',$where);
		@preg_match("/WHERE(.*?)[AND|OR](.*?)/is",$where,$tmp);
		print_m($tmp);
		if(is_array($tmp)){
			foreach ($tmp as $val){
				if(!strstr('x'.$val.'x','l.')){
					$tmp2[] = $val;
				}
			}
			if(is_array($tmp2)){
				$where = implode(',',$tmp2);
			}
		}
		
		unset($tmp,$tmp2);
		$tmp = explode(',',$order_by);
		if(is_array($tmp)){
			foreach ($tmp as $val){
				if(!strstr('x'.$val.'x','l.')){
					$tmp2[] = $val;
				}
			}
			
			$order_by = @implode(',',$tmp2);
		}
		
		if(strlen(trim($order_by))>0 and !strstr($order_by,'ORDER BY')){
			$order_by = 'ORDER BY '.$order_by;
		}
		unset($tmp,$tmp2);
		$sql = "SELECT m.* FROM ".$table_main." m WHERE guid IN(".$guids_str.") ".$order_by;
		$rs = $this->db->SelectLimit($sql);
		return $rs;
	}
	
	function build_result(){
		global $input;
		$sql = $this->build_sql();
//		print_m($this->tag_setting);

		// 条数
		$limit = $this->tag_setting[num];
		if($limit ==0 or $limit > 500){
			$limit = 10;
		}
		
		// 开始行数
		// 修正下载前台分页
		if(isset($input['t']) and strlen(trim($input['t'])) > 0){
			$page   = ($input['page'])?$input['page']:1;
			$offset = ($page-1)*$limit;
		}
		$offset = ($this->tag_setting[offset])?$this->tag_setting[offset]:$offset;
		if(is_array($this->sql_optimize) and isset($this->tag_setting['optimize'])){
			// 尚未实现该查询方法
			// 第一步,查询link
			// 第二步,查询main
			// 最好,返回数据
			echo "optimize参数尚不支持";
			exit();
			$where    = $this->sql_optimize[where];
			$order_by = $this->sql_optimize[order_by];
			print_m($where);
			preg_match_all("/WHERE(.*?)(AND)?(.*)/is",$where,$tmp);
			print_m($tmp);
			/*
			$tmp = explode(',',$where);
			if(is_array($tmp)){
				foreach ($tmp as $val){
					if(!strstr('x'.$val.'x','m.')){
						$tmp2[] = $val;
					}
				}
				
				$where = @implode(',',$tmp2);
			}
			*/
			unset($tmp,$tmp2);
			$tmp = explode(',',$order_by);
			if(is_array($tmp)){
				foreach ($tmp as $val){
					if(!strstr('x'.$val.'x','m.')){
						$tmp2[] = $val;
					}
				}
				
				$order_by = implode(',',$tmp2);
			}
			unset($tmp,$tmp2);
			
			$sql_table = $this->sql_optimize;
			$sql = "SELECT DISTINCT(l.guid) FROM ".$sql_table[main_cate_link]." l ".$where." ".$order_by;
			echo $sql;
			$rs  = $this->db->SelectLimit($sql,$limit,$offset);
			$guid_rows = $rs->GetRows();
			if(is_array($guid_rows)){
				foreach ($guid_rows as $val){
					$guids[] = $val[guid];
				}
				$rs = $this->build_sql_sub($guids);
			}
		}else{
			$rs     = $this->db->SelectLimit($sql,$limit,$offset);
		}
		return $rs;
	}
	
	function news()
	{
		// 标题长度
		$len  = ($this->tag_setting[len])?$this->tag_setting[len]:$this->inews_conf[list_len];
		// 简介长度
		$summary_len = ($this->tag_setting[summary_len])?$this->tag_setting[summary_len]:0;
		$rs = $this->build_result();
		if($rs){
			$rows = $rs->GetRows();
			$i = 0;
			foreach ($rows as $val){
				$i++;
				$val[no] = $i;
				if($val[c_id] == 0){
					$val[c_id] = $this->guids_c_id["".$val[guid].""];
				}
				$cols=($this->tag_setting[cols])?$this->tag_setting[cols]:1;
				if(($i%$cols)==0){
					$val['TR'] = ' </tr><tr> ';
					$val['BR'] = ' <BR /> ';
				}
	
				$c_url = ($this->c_rows["".$val[c_id].""]['c_url'])?$this->c_rows["".$val[c_id].""]['c_url']:$this->inews_path->htdocs_url.$this->c_rows["".$data_arr[c_id].""]['path'];
				$file_name = build_file_name($val);
				$file_folder = file_page::build_dir($this->c_rows["".$val[c_id].""],$val[datetime]);
				$val['link'] = (strlen($val[refresh_url])>7)?$val[refresh_url]:$c_url.'/'.$file_folder.'/'.$file_name.'.'.$this->inews_conf['file_ext'];
				$date_format = ($this->tag_setting[date_format])?$this->tag_setting[date_format]:$this->inews_conf['date_list'];
				$val['date'] = date($date_format,$val['datetime']);
				// 当日新闻彩色显示
				if($this->inews_conf[title_new_is_color] and (date('Y-m-d',$val['datetime']) == date('Y-m-d'))){
					$val[style] = 'new_color';
				}else{
					$val[style] = 'new_normal';
				}
				$val['c_url']   = $c_url;
				$val['c_title'] = $this->c_rows["".$val[c_id].""]['c_title'];
				$val['c_path']  = $this->c_rows["".$val[c_id].""]['path'];

				if(isset($this->tag_setting[lang]) and (strtolower($this->tag_setting[lang]) != strtolower($this->inews_conf[file_encode_output]))){
					$lang[file] = $val['c_path'].'/'.$file_folder.'/'.$file_name.'.'.$this->inews_conf['file_ext'];
					$lang[lang] = $this->tag_setting[lang];
					$lang[link] = $val['link'];
					$val['link'] = $this->inews_path->user_path[gbig5_url].'/?p='.base64_encode(serialize($lang));
				}
				
				$val['image_width']  = ($this->tag_setting['img_width'])?" width=\"".$this->tag_setting['img_width']."\" ":' ';
				$val['image_height'] = ($this->tag_setting['img_height'])?" height=\"".$this->tag_setting['img_height']."\" ":' ';
				
				if(trim($val[title4index]) == ''){
					if($len > 0 && $len < strlen($val[title])){
						$val[title4index] = csubstr($val[title],$len);
					}else{
						$val[title4index] = $val[title];
					}
				}else{
					if($len > 0 && $len < strlen($val[title4index])){
						$val[title4index] = csubstr($val[title4index],$len);
					}
				}
				if(substr($val[title4index],0,2) != '《' and !isset($this->tag_setting[no_space])){
					$val[title4index] = '&nbsp;'.$val[title4index];
				}
				if($summary_len > 0){
					$val[summary] = csubstr($val[summary],$summary_len);
				}
				if(strlen($val[color]) > 3){
					$val[title4index] = "<font color=\"#".$val[color]."\">".$val[title4index]."</font>";
				}
				$val[title]       = htmlspecialchars($val[title]);
				$this->template->assign_block_vars('list',$val);
			}
			$this->template->assign_vars($this->inews_path->user_path);
			// 输出
			$gzip_contents =  $this->template->quick_get_from_handle($this->template_use);
			if(isset($this->tag_setting[lang]) and (strtolower($this->tag_setting[lang]) != strtolower($this->inews_conf[file_encode_output])) ){
				$chinese = new chinese();
				$search   = array ( '/charset=gb2312/i', '/charset=gbk/i', '/lang="cn"/i', '/lang="zh_CN"/i', '/content="cn"/i', '/content="zh_CN"/i', '/encoding="gb2312"/i');
				$replace  = array ('charset=big5','charset=big5', 'lang="tw"',  'lang="zh_TW"', 'content="tw"', '/content="zh_TW"', 'encoding="big5"');
				$gzip_contents = preg_replace($search, $replace, $gzip_contents);
				$gzip_contents = $chinese->gb_to_big5($gzip_contents);
				echo $gzip_contents;
			}else{
				echo $gzip_contents;
			}
		}else{
			$this->template->assign_vars($this->inews_path->user_path);
			echo $this->template->quick_get_from_handle('error');
		}
		

	}
	
	function topic()
	{
		$sql = "SELECT ";
	}
}


?>
Enter labels to add to this page:
Please wait 
Looking for a label? Just start typing.