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

softyun3年前cms教程43

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

 

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

相关文章

企业黄页模块配置指南

企业黄页--模块配置设置设置的栏目只对产品栏目起到作用。企业库 得经营模式在这里进行修改。每种模式用 | 隔开即可。企业性质每行一个,直接回车即可。 自动更新周期更新黄页频道首页、新闻首页、产品页、...

制作另类导航菜单全过程[1]

说明:通过这节我们学会在线模板编辑、标签的使用、以及快速建立标签和修改标签的方法我们来实现phpcms 主站菜单导航效果。代码如下:<!--频道列表--><div id="Whate...

DEDECMS增加自定义属性完整教程

给客户最站的时候,因客户需要,自定义属性太少,不够用,需要新增几个,也总有人问如何增加,今天就凑空写一下DEDECMS如何增加自定义属性.其实很简单的.下面用文字加图示的方式展现给大家,希望对朋友们有...

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

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

PhpCms系统设置:管理模型

位置:系统设置---模型管理---管理模型模型管理,可以对模型维护、修改属性、删除、导出、字段管理,如图:修改模型配置,生成方式、栏目页URL规则、内容页URL规则、工作流方案,如图:...

PhpCms系统设置:IP 禁止

位置:系统设置----系统工具----IP 禁止使用之前需要开启:位置:系统设置----网站配置----安全设置禁止IP会对资源有一定的占用,同时使用次功能能有效的保证网站的安全性。可以对有恶意性的i...