阅读:3323回复:0
Phpcms V9 调用全站文章排行的解决方案
今天忙于修改网站界面,想在首页添加浏览排行功能,却发现Phpcms竟然不支持调用全站文章排行。下午仔细研究了Phpcms源码,终于找到解决办法。默认情况下,Phpcms只支持调用当前文章排行,代码如下:
{pc:content action="hits" catid="$catid" num="10" order="views DESC" cache="3600"} 其中$catid为待调用栏目的id,如果想实现全站调用,需要修改phpcmsmodulescontentclassescontent_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(!emptyempty($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; [*]} 调用方法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 转载请注明出处 。 </strong> |
|