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

softyun3年前cms教程113

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

 

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

相关文章

dede模板留言提交错误时返回空白页处理方法

织梦dedecms模板留言提交错误时返回空白页处理方法 :留言提交错误时返回空白页处理方法默认情况下,如果我们使用dede模板中的留言板时,如果留言信息不正确或者输入内容为空时,dedecms系统可能...

sonchannel 子栏目调用标签的使用教程

今天给大家分享一下sonchannel子栏目调用标签的使用教程,需要的朋友可以记录一下哦标签名称:sonchannel功能说明:子栏目调用标签适用范围:全局使用基本语法:{dede:sonchanne...

织梦中英双语网站分页导航和面包屑导航制作

织梦dedecms中英双语网站分页导航和面包屑导航制作 。在英文站中列表分页导航出现“首页 上一页 下一页 末页”,当前位置:首页>about>,这样的问题改如何解决呢本文就来解决一下这两...

PhpCms系统设置:Phpcms与ucenter整合

一、ucenter配置 文字阐述:上面就是ucenter里面的配置信息二、phpcms配置 位置:系统设置---网站配置---通行证三、查看ucenter通信状态 ...

【Vote 标记使用实例】-DedeCMS模板制作使用实例教程(7)

【Type 标记】用于获取一组投票表单。  其使用范围限于:封面模板。  可先进入后台,按下面操作方法填写好调查内容:  辅助插件-->投票模块-->增加一组投票      通过调试了解其...

DedeCMS教程:在列表页输出当前页码相关信息

本方法原理上适用于DedeV5.3及以上所有的版本,不分编码。 这个问题来源于刚才有一位朋友的需求,他希望在列表页可以自由的调用当前栏目的一些与页码相关的信息。这个需求如果用自带的织梦标签,是无法实...