Phpcms V9 調用全站文章排行的解決方案_PHPCms教程

      編輯Tag賺U幣
      教程Tag:暫無Tag,歡迎添加,賺取U幣!
      今天忙于修改網站界面,想在首頁添加瀏覽排行功能,卻發現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.     /** 
      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 { 
      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"}

      作者:Esion  來源:http://www.cnblogs.com/esion  轉載請注明出處

       

      查看更多 phpcms教程  phpcms模板

      來源:未知//所屬分類:PHPCms教程/更新時間:2012-07-27
      相關PHPCms教程