当前位置:首页 > CMS教程 > phpcms > 列表

Phpcms V9 调用全站文章排行的解决方案

发布:smiling 来源: PHP粉丝网  添加日期:2014-10-19 22:25:45 浏览: 评论:0 

今天忙于修改网站界面,想在首页添加浏览排行功能,却发现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文件,找到以下函数:

  1. public function hits($data) {  
  2.     $catid = intval($data['catid']);  
  3.     if(!$this->set_modelid($catid)) return false;  
  4.    
  5.     $this->hits_db = pc_base::load_model('hits_model');  
  6.     $sql = $desc = $ids = '';  
  7.     $array = $ids_array = array();  
  8.     $order = $data['order'];  
  9.     $hitsid = 'c-'.$this->modelid.'-%';  
  10.     $sql = "hitsid LIKE '$hitsid'";  
  11.     if(isset($data['day'])) {  
  12.         $updatetime = SYS_TIME-intval($data['day'])*86400;  
  13.         $sql .= " AND updatetime>'$updatetime'";  
  14.     }  
  15.     if($this->category[$catid]['child']) {  
  16.         $catids_str = $this->category[$catid]['arrchildid'];  
  17.         $pos = strpos($catids_str,',')+1;  
  18.         $catids_str = substr($catids_str$pos);  
  19.         $sql .= " AND catid IN ($catids_str)";  
  20.     } else {  
  21.         $sql .= " AND catid='$catid'";  
  22.     }  
  23.     $hits = array();  
  24.     $result = $this->hits_db->select($sql'*'$data['limit'], $order);  
  25.     foreach ($result as $r) {  
  26.         $pos = strpos($r['hitsid'],'-',2) + 1;  
  27.         $ids_array[] = $id = substr($r['hitsid'],$pos);  
  28.         $hits[$id] = $r;  
  29.     }  
  30.     $ids = implode(','$ids_array);  
  31.     if($ids) {  
  32.         $sql = "status=99 AND id IN ($ids)";  
  33.     } else {  
  34.         $sql = '';  
  35.     }  
  36.     $this->db->table_name = $this->tablename;  
  37.     $result = $this->db->select($sql'*'$data['limit'],'','','id');  
  38.     foreach ($ids_array as $id) {  
  39.         if($result[$id]['title']!='') {  
  40.             $array[$id] = $result[$id];  
  41.             $array[$id] = array_merge($array[$id], $hits[$id]);  
  42.         }   //phpfensi.com 
  43.     }  
  44.     return $array;  
  45. }  

修改代码,见注释,代码如下:

  1. public function hits($data) {  
  2.     $catid = intval($data['catid']);  
  3.    
  4.     $this->hits_db = pc_base::load_model('hits_model');  
  5.     $sql = $desc = $ids = '';  
  6.     $array = $ids_array = array();  
  7.     $order = $data['order'];  
  8.     $hitsid = 'c-'.$this->modelid.'-%';  
  9.     $sql = "hitsid LIKE '$hitsid'";  
  10.     if(isset($data['day'])) {  
  11.         $updatetime = SYS_TIME-intval($data['day'])*86400;  
  12.         $sql .= " AND updatetime>'$updatetime'";  
  13.     }  
  14.     if(!emptyempty($catid) && $catid>0) { //添加判断:id是否为空  
  15.         if(!$this->set_modelid($catid)) return false;  
  16.         if($this->category[$catid]['child']) {  
  17.             $catids_str = $this->category[$catid]['arrchildid'];  
  18.             $pos = strpos($catids_str,',')+1;  
  19.             $catids_str = substr($catids_str$pos);  
  20.             $sql .= " AND catid IN ($catids_str)";  
  21.         } else {  
  22.             $sql .= " AND catid='$catid'";  
  23.         }  
  24.     }  
  25.        
  26.     $hits = array();  
  27.     $result = $this->hits_db->select($sql'*'$data['limit'], $order);  
  28.     foreach ($result as $r) {  
  29.         $pos = strpos($r['hitsid'],'-',2) + 1;  
  30.         $ids_array[] = $id = substr($r['hitsid'],$pos);  
  31.         $hits[$id] = $r;  
  32.     }  
  33.     $ids = implode(','$ids_array);  
  34.     if($ids) {  
  35.         $sql = "status=99 AND id IN ($ids)";  
  36.     } else {  
  37.         $sql = '';  
  38.     }  
  39.     $this->db->table_name = $this->tablename;  
  40.     $result = $this->db->select($sql'*'$data['limit'],'','','id');  
  41.     foreach ($ids_array as $id) {  
  42.         if($result[$id]['title']!='') {  
  43.             $array[$id] = $result[$id];  
  44.             $array[$id] = array_merge($array[$id], $hits[$id]);  
  45.         }  
  46.     }  
  47.     return $array;  
  48. }  

修改代码后,无论设置栏目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"}

Tags: Phpcms全站文章 Phpcms文章排行

分享到: