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

softyun3年前cms教程119

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

 

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

相关文章

DEDE5.3隆重盛大发布,无忧鼎力支持!

经过众多DEDE爱好者测试完善后的DEDECMS 5.3正式版在今天12月10日这个特别的日子发布了.今天,广大织梦爱好者的心情都无比激动,论坛的火爆程度更是国内CMS行业中前所未有的,短短几个小时,...

DedeCms 万能安全防护代码

为了让大家的CMS更安全,有需要的手工在config_base.php里加上打开config_base.php 找到//禁止用户提交某些特殊变量$ckvs = Array('_GET','_POST'...

搜索框里显示字段鼠标点击后就隐藏的方法

分享一下搜索框里显示字段鼠标点击后就隐藏的方法 方法如下:<input name="keyword" id="keyword" type="text" class="searchtxt"  si...

DedeCms教程:DedeCMS中MySQL修复表的两个小技巧

 涉及数据库操作请先备份,以防万一。DedeCMS用户经常碰到数据表出现报错“dede_search_keywords' is marked as crashed and should be repa...

织梦CMS5.7SP1的TAGS字数怎么改长?

织梦 dedecms 的TAGS默认字数比较少,只能写12个字符,多出的字符就会自动截断或直接去除,经常给我们带来一些麻烦。现在给大家带来一个小方法,介绍织梦(dedecms)TAGS的字数限制怎么改...

PhpCms内容管理:专题

位置:内容管理----专题管理专题管理中,是对专题的维护、查找、一、添加专题 位置:模块管理---专题--添加专题添加专题二、管理专题 位置:模块管理---专题--管理专题专题的碎片添加完成:现在我们...