phpcms V9如何调用全站文章排行

简介:

想在首页添加浏览排行功能,却发现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']); 


    if(!empty($catid) && $catid>0) { //添加判断:id是否为空 

 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(!emptyempty($catid) && $catid>0) { //添加判断:id是否为空

        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"}



本文转自 gutaotao1989 51CTO博客,原文链接:http://blog.51cto.com/taoyouth/1562171

相关文章
|
1月前
|
CDN
阿里云国际版CDN网页打不开、页面报错该如何解决?
阿里云国际版CDN网页打不开、页面报错该如何解决?
|
5月前
discuz首页出现重定向过多,discuz首页域名和默认域名一致的情况下无法保存
discuz首页出现重定向过多,discuz首页域名和默认域名一致的情况下无法保存
58 0
|
XML 关系型数据库 MySQL
|
API PHP
PHP对接百度API访问自动提交收录SEO
PHP对接百度API访问自动提交收录
593 0
PHP对接百度API访问自动提交收录SEO
Joomla如何在网站中添加流量统计代码
查看网站统计是每个站长比不可少的工作。那么如何给Joomla网站添加一个统计代码,来有效的管理自己的网站呢?这里以百度流量统计为例,演示怎么给Joomla T3-Framework架构网站怎么添加统计代码。
Joomla如何在网站中添加流量统计代码
|
域名解析 搜索推荐 SEO
一个网站有多个域名,怎么处理对SEO比较友好?
哪些情况下,会出现一个网站多个域名? 1、购买了核心域名(如:fgba.net),同时把小众后缀域名一起买了(如:fgba.cn),网站建立后,希望把小众后缀的域名一起解析到网站上。 2、发现正使用的域名A存在问题,比如一直不收录、不合适、不喜欢,换了新域名B后,仍希望把域名A解析到网站上。 3、域名所有权问题或者业务缘故,导致必须给网站启用新域名,希望老域名被转走之前还可以解析一段时间,传递权重给新域名。
441 0
|
XML 数据格式
PageAdmin Cms自助建站系统生成百度SiteMap文件的方法
PageAdmin作为一款优秀的建站系统,国内拥有不少的用户,之前在论坛里看到很多用户生成百度SiteMap文件都是通过安装插件来实现,但实际上通过系统自带的自定义路由功能一样可以实现siteMap文件生成,下面说一下步骤。
1351 0
|
JavaScript PHP
DEDE全站评论总数调用以及与使用方法
  调用织梦全站评论总数其实很简单,比如用DedeCMS搭建博客类型的网站就可以用该方法调用评论总数,本文给大家介绍一个简单的方法,使用JS调用评论,而且可以使用到DEDECMS中的任何地方! 第一步:首先在plus目录下,建立一个名为feedcount.
1166 0
如何在线生成自己的短网址,可自定义域名 可统计点击数
今天分享一个程序,这款程序不仅可以生自定义的短网址,还可以统计点击信息。
5675 0
|
PHP 数据安全/隐私保护
如何在WORDPRESS中添加CNZZ等统计代码
如何在WORDPRESS中添加CNZZ等统计代码http://www.bieryun.com/1257.html1, 首先进入我们的WordPress网站后台,即在浏览器上输入 网站域名/wp-login,如我的网站是输入forlong401.
3411 0