Phpcms v9调用全站文章排序榜实现方法

v9调用当前栏目排行代码如下:

 代码如下 复制代码
{pc:content  action="hits" catid="$catid" num="10" order="views DESC" cache="3600"}

其中$catid为待调用栏目的id,如果想实现全站调用,需要修改phpcmsmodulescontentclassescontent_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(!empty($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"}

时间: 2024-10-11 13:59:29

Phpcms v9调用全站文章排序榜实现方法的相关文章

PHPCMS V9调用自定义字段多图的方法

<!--调用组图类型字段成列表-->   {pc:content action="lists" catid="$catid" num="10" order="listorder DESC" moreinfo="1" page="$page"}         {loop $data $n $r}         <div class="col-auto&quo

如何彻底解决phpcms v9升级后文章发布出现Mysql 1267错误

彻底解决phpcms v9升级后,文章发布出现:MySQL Query : SELECT * FROM `withli_a`.`v9_keyword` WHERE `keyword` = '吼吼' AND `siteid` = '1' LIMIT 1 MySQL Error : Illegal mix of collations (latin1_swedish_ci,IMPLICIT) and (gbk_chinese_ci,COERCIBLE) for operation '=' MySQL

PHPCMS V9中QQ登录网站失败问题解决方法

这个故障的原因是PHPCMS V9的QQ登录功能代码中,使用了file_get_contents函数来获取腾讯的https网址,这类网址是通过ssl加密传输的.虽然,我们可以通过为PHP安装openssl扩展,让file_get_contents函数可以获取到内容,但获取到的内容还是加密的,无法正常的解密. 我的解决思路是自己编写一个通过curl读取数据的方法,替换掉PHPCMS原有的方法,具体如下: 首先,找到phpcmsmodulesmemberclassesqqapi.class.php文

phpcms v9设置何修改seo标题分隔符方法

phpcms v9的标题分隔符默认是" - ",如设置seo标题为"web开发",在网页的标题栏则显示"web开发 - 网志博客",据说," - "分隔符对谷歌搜索引擎比较友好,但百度却更青莱于" _ "分隔符,可能它更符合中国人的使用习惯吧.随着谷哥在中国市场的消退,前不久我看了一篇关于搜索引擎在中国市场所点市场分额的报道,谷哥只占6%,而百度却占到64%!所以站长们要做SEO优化,主其主要目的只能是讨好

PHPCMS V9调用父栏目 顶级父栏目的代码

一.调用父栏目 首先是列表页和二级栏目页list.html    代码如下 复制代码 {$CATEGORYS[$top_parentid][catname]}  //顶级父栏目名称 {$CATEGORYS[$CAT[parentid]][catname]}  //父栏目名称这个没有测试过. {$CATEGORYS[$top_parentid][XXX]}    //顶级父栏目的相关字段值 在list.html或者二级栏目中怎么调用出来父栏目的相关栏目和信息呢?    代码如下 复制代码 {pc:

phpcms v9 内容搜索不完全显示解决方法

这个bug原来是这个程序在开发的时候没有考虑周全.在升级后把原来的搜索功能原有的搜索分词进行了整合和改动导致的.所以当我们使用搜索功能的时候有的就搜不到或者搜索不全.这样就不能从数据库中调出在前台显示出来了. 解决的办法如下: 首先连接 FTP到空间,进入到phpcms/modules/search/index.php文件. 找到以下代码: if (!empty($segment_q)) {    $sql = "`siteid`= '$siteid' AND `typeid` = '$type

动易首页调用最新文章图片向上滚动方法

动易|向上滚动 <DIV id=demo> <div id=demo1>  <IMG SRC=http://www.webjx.com/htmldata/2005-11-10/o.jpg><BR> <IMG src=http://www.webjx.com/htmldata/2005-11-10/1.jpg><BR> </div><div id=demo2></div></div> &l

phpcms v9 时间戳的详细介绍

phpcms v9中发布时间inputtime格式是什么,写的不同,格式不同 phpcms标签里的updatetime和inputtime标签区别: ①updatetime是更新时间(也叫修改时间,就是后台的文章列表看到的时间): ②inputtime是第一次写文章时的发布时间(就是添加文章或者修改文章时缩略图下方的时间). 如{date('Y-m-d',$r[inputtime])}表示的是 年-月-日,相应的,Y,m,d是可以换掉的,代表的意思也是不同 已知date()是一个时间函数,要设置

三种dedecms调用相关文章的方法

在文章的末尾或侧边栏添加相关文章可以提高用户的黏度,提高pv,增加se的好印象(哈哈),那么dedecms如何调用相关文章呢?有三种方法可以实现. 第一种dedecms调用相关文章的方法,用默认的likearticle {dede:likearticle row='6' titlelen='40'} <li><a href="[field:arcurl/]" title="[field:title /]">[field:title /]<