【phpcms-v9】获取上周发表的文章中点击量最高的三篇带缩略图的文章

1.提示:使用{pc action="hits"}{/pc}标签是不能完成此功能的


2.html代码:

<div class="b_bianjituijian_c">
					<!-- 当前栏目下周点击率最高的三篇文章 -->
					{pc:content action="lists" catid="$catid" len="3" thumb="1" views="week"  cache="3"}
					{loop $data $r}
					<dl class="b_bianjituijian_cf">
						<dt><a href="{$r['url']}"><img src="{$r['thumb']}" width="60" height="60"  alt="{$r['title']}"/></a></dt>
						<dd>
							<h3><a href="{$r['url']}">{str_cut($r[title],24,'...')}</a></h3>
							<p>
							{str_cut($r[description],70,'...')}
								<a href="{$r['url']}">【详细】</a>
							</p>
						</dd>
					</dl>
					
					<span class="border-bx"></span>
					{/loop}
					{/pc}
</div>


3.libs/function/global.func.php文件中添加:

//排序函数-weiyanhui添加,主要为了实现list标签中文章按点击量排序功能
function array_sort($arr,$keys,$type='desc'){
	$keysvalue = $new_array = array();
	foreach ($arr as $k=>$v){
		$keysvalue[$k] = $v[$keys];
	}
	if($type == 'asc'){
		asort($keysvalue);
	}else{
		arsort($keysvalue);
	}
	reset($keysvalue);
	foreach ($keysvalue as $k=>$v){
		$new_array[$k] = $arr[$k];
	}
	return $new_array;
}

4.content_tag.class.php文件中lists方法:

/**
	 * 列表页标签:主要返回的是主表中数据与附表中数据
	 * @param $data
	 */
	public function lists($data) {
		$catid = intval($data['catid']);							//pc标签中catid属性
		$data['limit'] = (isset($data['limitt'])&& (!empty($data['limitt'])))?$data['limitt']:$data['limit'];									//pc标签中limit属性,此行代码由weiyanhui添加
		if(!$this->set_modelid($catid)) return false;						//会根据栏目id->对应的模型id->对应的模型表
		if(isset($data['where'])) {											//如果pc标签中设置了where属性,一般情况下不存在
			$sql = $data['where'];									
		} else {															//如果pc标签中没有设置where属性 
			$thumb = intval($data['thumb']) ? " AND thumb != ''" : '';		//如果有thumb属性
			if($this->category[$catid]['child']) {							//当前栏目下是否存在子栏目
				$catids_str = $this->category[$catid]['arrchildid'];		//所有子栏目id,包括当前栏目自身id
				$pos = strpos($catids_str,',')+1;							
				$catids_str = substr($catids_str, $pos);					//所有子栏目id,不包括当前栏目自身id
				$sql = "status=99 AND catid IN ($catids_str)".$thumb;		//拼接成一个sql语句
			} else {
					$sql = "status=99 AND catid='$catid'".$thumb;				//如果当前栏目下不存在子栏目
			}
		}
		
		
		
		
		//weiyanhui开始,获取一周内发表的点击量最高的带缩略图的三篇文章
		if(isset($data['views']) && $data['views']=='week'){
			$time=time()-3600*24*7;//一周内
			$sql=$sql." and inputtime > '$time' ";
		}
		//weiyanhui结束
		
		//weiyanhui开始,获取昨天发表的点击量最高的三篇文章
		if(isset($data['views']) && $data['views']=='yestoday'){
			$time=time()-3600*24;//昨天
			$sql=$sql." and inputtime > '$time' ";
		}
		//weiyanhui结束
		
		
		
		
		
		$order = $data['order'];											//pc标签中order属性
		//$sql作为一个条件出现,调用的是model.calss.php文件中的select方法,返回结果集数组,并按照键名'id'排序
		$return = $this->db->select($sql, '*', $data['limit'], $order, '', 'id');//从数据库中获取主表数据,使用的也是sql语句查询
		//注意:修改了$data['limit']为$data['limitt']了,修改于2012年09月21日 19:15
		//如果需要在前台显示类别名称,可添加如下代码
		
		
		/*文章添加类别
		$TYPES = getcache('type_content','commons');//获取类别缓存文件,此文件缓存了所有与类别信息相关的信息
		foreach ($return as $key=>$v) {										
			$return[$key][typename]=$TYPES[$v['typeid']][name];//给$return中的每篇文章追加一个类别字段
		}
		echo "<pre>";
		print_r($return);
		*/
		
		
		
		//weiyanhui开始,此参数代表从hits表中获取每篇文章的点击量
		if($data['views']){
			//二次开发-获取文章点击量
			foreach($return as &$r){
				$h_md=pc_base::load_model('hits_model');
				$get_db=$h_md->get_one(array('hitsid'=>"c-".$this->db->modelid."-".$r[id]));
				$r['views']=$get_db[views];
			}
			$return = array_sort($return,'views');//按点击量排序
		}
		//weiyanhui结束
		//weiyanhui开始
		if(isset($data['len'])){//截取长度
			//获取数组中的前len条数据
			$return=array_slice($return,0, intval($data['len']));
		}
		//weiyanhui结束
		
		
		
		
	   
		
		
		
		
		
		
		//调用副表的数据
		if (isset($data['moreinfo']) && intval($data['moreinfo']) == 1) {	//如果pc标签中设置了moreinfo属性:是否调用附表数据
			$ids = array();
			//$return为返回的主表数据
			foreach ($return as $v) {										//循环主表中的记录信息:$v-主表中的每条记录
				if (isset($v['id']) && !empty($v['id'])) {
					$ids[] = $v['id'];										//ids[]是主表中排序完成的文章id数组
				} else {
					continue;
				}
			}
			if (!empty($ids)) {
				$this->db->table_name = $this->db->table_name.'_data';		//副表名 
				$ids = implode('\',\'', $ids);								//以逗号拼接成一个字符串
				$r = $this->db->select("`id` IN ('$ids')", '*', '', '', '', 'id');//查询与主表中数据有关的副表中的数据
				if (!empty($r)) {
					foreach ($r as $k=>$v) {								//副表中的数据
						//$return:返回的主表中的数据,主表中的id字段值与附表中的id字段值是对应的,也就是说一篇文章在主表中存储的id跟在附表中存储的id的值是相等的
						if (isset($return[$k])) $return[$k] = array_merge($v, $return[$k]);//主表中数据与副表中数据合并 
					}
				}
			}
		}
		return $return;
	}



  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值