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

所属分类: CMS教程 / phpcms 阅读数: 482
收藏 0 赞 0 分享
默认情况下,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(!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"}
更多精彩内容其他人还在看

PHPCMS开启全文搜索(sphinx)后搜索无效的解决方法

配置好sphinx,并在后台开启后,无论搜索什么关键字,每次搜索结果都是顺序的把我所有的文章列出来
收藏 0 赞 0 分享

PHPCMS取消搜索时的分词功能的方法

最近弄一个站,但是搜索功能有点蛋疼了。分词功能出来的结果,好像不如不用。所以做以下修改,暂时先不用分词功能吧。
收藏 0 赞 0 分享

PHPCMS实现文章置顶功能的方法

这篇文章主要介绍了PHPCMS实现文章置顶功能的方法,需要的朋友可以参考下
收藏 0 赞 0 分享

phpcms教程之增加统计代码可以统计每天发表文章数量

本文介绍了给phpcms增加统计代码,实现可以统计每天发表文章数量的功能,大家参考使用吧
收藏 0 赞 0 分享

如何解决phpcms V9后台拿shell时出错问题

很多新手朋友都遇到过phpcms V9后台拿shell时出错,下面为大家介绍个不错的解决方法,希望对大家有所帮助
收藏 0 赞 0 分享

phpcms 模板页面使用的标签和功能记录整理

在使用phpcms的时候遇到了一些问题,主要是模板页面使用的标签,记录下以后再做的时候可以使用到
收藏 0 赞 0 分享

phpcms链接数据库的配置文件在哪

phpcms修改链接数据库的配置文件信息需要知道其位置,大家看下本文就知道了
收藏 0 赞 0 分享

phpcms 投稿问题之游客投稿(不用登录)

最近在使用phpcms,需要匿名投稿功能及审核,这里简单分享下方法,需要的朋友可以参考下
收藏 0 赞 0 分享

phpcms v9将栏目描述的多行文本修改为编辑器

phpcms v9在添加栏目的时候,栏目描述为多行文本,无法满足有图片,以及格式的修改调整,具体的实现如下,感兴趣的朋友可以参考下
收藏 0 赞 0 分享

phpcms根据栏目放置加载不同广告方法分享

本文主要介绍了phpcms根据栏目放置加载不同广告的方法,大家参考使用吧
收藏 0 赞 0 分享
查看更多