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

softyun3年前cms教程206

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

 

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

相关文章

PhpCms系统设置:网站性能优化

位置:系统设置----网站配置----性能优化性能的优化能提高我们网站的负载能力,系统的优化要根据自己服务器的情况而定!1、启用模板缓存自动更新: 关闭此功能可明显提高速度和系统负载,但是如果模板被修...

dedecms自定义表单后台显示时间格式错误的解决方法

今天教给大家一些织梦dedecms自定义表单后台显示时间格式错误的解决办法,比较简单,希望可以帮助到你。在制作dedecms企业模板的时候 很多客户都需要制作一个在线订购功能!仔细的朋友就会发现使用的...

[企业黄页]后台基本使用

区域治理:企业黄页的地区需要自己添加,这样可以满足不同的用户群体和门户地区性网站。在企业注册,求职招聘等多个页面调用了地区。更新链接:黄页频道首页是自动更新的,在模块配置有更新周期设置。有时候要是设置...

DedeCms 更新搜索表内容链接(解决搜索路径错误)

dedecmsV5更新搜索表并更新生成页面程序(解决搜索路径错误)点击下载此文件注意:该程序在要您的管理目录才能正常运行 默认目录:dede...

PhpCms系统设置:关键词管理

一、添加关键词 位置:系统设置----相关设置----关键词管理----添加关键词关键词是在文章中比较有代表性的词语,作为关键词。这样有利于文章的搜索,同时用关键词能更好的使文章之间关联二、管理关键词...

关于时区和更新列表无法生成最后一页的解决方法

关于时区和更新列表无法生成最后一页的解决方法关于UTF8版本安装后后台显示空白的用户请重新下载最新版本进行安装时区不正常 从其他版本升级到5.1的朋友可能会遇到时区不正常的问题 通常是文档的发布时间多...