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

softyun3年前cms教程47

今天忙于修改网站界面,想在首页添加浏览排行功能,却发现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; 

修改代码 见注释:

/** 
 * 排行榜标签 
 * @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; 

修改代码后,无论设置栏目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  来源:cnblogs/esion  转载请注明出处

 

免责声明:本文内容来自用户上传并发布,站点仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。请核实广告和内容真实性,谨慎使用。

相关文章

织梦dedecms自定义模型采集数据

今天给大家分享织梦dedecms自定义模型采集数据,希望对你有帮助对于新建的dedecms自定义模型,如何采集数据呢打开\dede\templets\co_add_step0.htm,找到 大约在17...

dedecms织梦获取文章里第一张图片

如果我们在dedecms织梦获取文章里第一张图片,那么可以根据下面的方法来实现,仅供参考学习哦~1、在include/helpers/archive.helper.php/** * 获得某文档的第一个...

dedecms后台(反应特别慢)点击就卡住的最终解决方法

dedecms后台 反应特别慢点击就卡住的最终解决方法织梦dedecms后台 反应慢菜单不显示,dede后台系统首页打开慢故障可能好多朋友都遇到过。在网上搜索没有找到相关的解决方法。经过排查发现问题出...

dedecms怎么给第一个li加class

今天给大家分享一下dedecms怎么给第一个li加class,有需要的朋友可以记录一下写法如下:{dede:arclist row=5 typeid=200} <li [field:global...

栏目内容过多如何分为2行显示

很多人栏目内容过多,需要分成2行,解决办法如下:修改/templets/default/dedecms.css修改188行为以下内容:Copy code.header .nav{ width:100%...

DedeCMS的自定义表单增加"全选/全不选"的功能按钮

教大家一下如何在DedeCMS的自定义表单增加“全选/全不选”的功能按钮我们先看看效果图:织梦自定义表单没有批量选择的功能,给我们管理带来很大不便,如果需要加上“全选/全不选”的功能,步骤如下: 从/...