找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索
查看: 106|回复: 0

[cms教程] Phpcms V9 调用全站文章排行的解决方案

[复制链接]

该用户从未签到

发表于 2019-3-24 15:53:00 | 显示全部楼层 |阅读模式

您需要 登录 才可以下载或查看,没有账号?立即注册

×
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; } [/ol,修改代码(见注释):
/**  * 排行榜标签  * @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; } [/ol,修改代码后,无论设置栏目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://**ceres.comblogs.com/esion  转载请注明出处
回复

使用道具 举报

网站地图|页面地图|文字地图|Archiver|手机版|小黑屋|找资源 |网站地图

GMT+8, 2024-10-5 11:07

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表