首页 > CMS > PhpCMS > 正文

Phpcms v9调用全站文章排序榜实现方法

2024-09-10 07:16:19
字体:
来源:转载
供稿:网友

Phpcms只支持调用当前文章排行,代码也是相当的简单,但是我想调用全站文章的排行这一点它做得不如 dedecms好.

v9调用当前栏目排行代码如下:

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

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

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

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

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

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表