zoukankan      html  css  js  c++  java
  • Phpcms V9 调用全站文章排行的解决方案

    今天忙于修改网站界面,想在首页添加浏览排行功能,却发现Phpcms竟然不支持调用全站文章排行。下午仔细研究了Phpcms源码,终于找到解决办法。

    默认情况下,Phpcms只支持调用当前文章排行,代码如下:

    {pc:content  action="hits" catid="$catid" num="10" order="views DESC" cache="3600"}

    其中$catid为待调用栏目的id,如果想实现全站调用,需要修改phpcms\modules\content\classes\content_tag.class.php文件,找到以下函数:

            /**
    	 * 排行榜标签
    	 * @param $data
    	 */
    	public function hits($data) {
    		$catid = intval($data['catid']);
    		if(!$this->set_modelid($catid)) return false;
    
    		$this->hits_db = pc_base::load_model('hits_model');
    		$sql = $desc = $ids = '';
    		$array = $ids_array = array();
    		$order = $data['order'];
    		$hitsid = 'c-'.$this->modelid.'-%';
    		$sql = "hitsid LIKE '$hitsid'";
    		if(isset($data['day'])) {
    			$updatetime = SYS_TIME-intval($data['day'])*86400;
    			$sql .= " AND updatetime>'$updatetime'";
    		}
    		if($this->category[$catid]['child']) {
    			$catids_str = $this->category[$catid]['arrchildid'];
    			$pos = strpos($catids_str,',')+1;
    			$catids_str = substr($catids_str, $pos);
    			$sql .= " AND catid IN ($catids_str)";
    		} else {
    			$sql .= " AND catid='$catid'";
    		}
    		$hits = array();
    		$result = $this->hits_db->select($sql, '*', $data['limit'], $order);
    		foreach ($result as $r) {
    			$pos = strpos($r['hitsid'],'-',2) + 1;
    			$ids_array[] = $id = substr($r['hitsid'],$pos);
    			$hits[$id] = $r;
    		}
    		$ids = implode(',', $ids_array);
    		if($ids) {
    			$sql = "status=99 AND id IN ($ids)";
    		} else {
    			$sql = '';
    		}
    		$this->db->table_name = $this->tablename;
    		$result = $this->db->select($sql, '*', $data['limit'],'','','id');
    		foreach ($ids_array as $id) {
    			if($result[$id]['title']!='') {
    				$array[$id] = $result[$id];
    				$array[$id] = array_merge($array[$id], $hits[$id]);
    			}
    		}
    		return $array;
    	}
    

      修改代码(见注释):

    	/**
    	 * 排行榜标签
    	 * @param $data
    	 */
    	public function hits($data) {
    		$catid = intval($data['catid']);
    
    		$this->hits_db = pc_base::load_model('hits_model');
    		$sql = $desc = $ids = '';
    		$array = $ids_array = array();
    		$order = $data['order'];
    		$hitsid = 'c-'.$this->modelid.'-%';
    		$sql = "hitsid LIKE '$hitsid'";
    		if(isset($data['day'])) {
    			$updatetime = SYS_TIME-intval($data['day'])*86400;
    			$sql .= " AND updatetime>'$updatetime'";
    		}
    		if(!empty($catid) && $catid>0) { //添加判断:id是否为空
    			if(!$this->set_modelid($catid)) return false;
    			if($this->category[$catid]['child']) {
    				$catids_str = $this->category[$catid]['arrchildid'];
    				$pos = strpos($catids_str,',')+1;
    				$catids_str = substr($catids_str, $pos);
    				$sql .= " AND catid IN ($catids_str)";
    			} else {
    				$sql .= " AND catid='$catid'";
    			}
    		}
    		
    		$hits = array();
    		$result = $this->hits_db->select($sql, '*', $data['limit'], $order);
    		foreach ($result as $r) {
    			$pos = strpos($r['hitsid'],'-',2) + 1;
    			$ids_array[] = $id = substr($r['hitsid'],$pos);
    			$hits[$id] = $r;
    		}
    		$ids = implode(',', $ids_array);
    		if($ids) {
    			$sql = "status=99 AND id IN ($ids)";
    		} else {
    			$sql = '';
    		}
    		$this->db->table_name = $this->tablename;
    		$result = $this->db->select($sql, '*', $data['limit'],'','','id');
    		foreach ($ids_array as $id) {
    			if($result[$id]['title']!='') {
    				$array[$id] = $result[$id];
    				$array[$id] = array_merge($array[$id], $hits[$id]);
    			}
    		}
    		return $array;
    	}
    

    修改代码后,无论设置栏目id为0或空,都能调取全站文章排行。

    调用方法1:

    {pc:content  action="hits" catid="0" num="10" order="views DESC" cache="3600"}

    调用方法2:

    {pc:content  action="hits" num="10" order="views DESC" cache="3600"}

  • 相关阅读:
    音频文件的属性
    判断UITextField.text是否为空(转)
    digital audio properties
    对scrollView的属性contentSize contentOffset contentInset个人理解
    OC定义变参函数
    va_list、va_start、va_arg、va_end的原理与使用(转载)
    游标笔记
    oracle中删除重复数据
    IIS无法启动,错误代码127[转自Alibaba DBA Team]
    推进游标是Fetch不是Petch!~!
  • 原文地址:https://www.cnblogs.com/esion/p/2608697.html
Copyright © 2011-2022 走看看