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

时间: 2024-10-27 08:44:32

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

dede在内页调用全站文章列表

由于网站比较简单,就把文章列表抽象成导航栏,但在文章内页却掉不出全站文章列表. 经过探究发现自己在用arclist调用时少加了一个属性typeid='top',因为在列表页或者文章页调出来的是本栏目下的文章,这是系统固定好的,如果希望在列表页和文章页也调用全站的内容,需要加上 typeid='top'这个标签属性,typeid也可以指定特定的顶级栏目id. 所以要全站调用文章列表(包括自定义标签)头部应该这样写才对:{dede:arclist addfields='num,en_name,ord

phpcms v9 常用调用标签(全)

本文介绍phpcms v9中模板标签使用说明. {template "content","header"}调用根目录下phpcms\template\content\header文件{CHARSET}字符集 (gbk或者utf-8){if isset($SEO['title']) && !empty($SEO['title'])}{$SEO['title']}{/if}{$SEO['site_title']}{$SEO['keyword']}{$SE

phpcms v9实现调用多个栏目id的方法

{pc:content action="position" posid="14" catid="13,14,15,16,17,18,19,20,21" order="listorder DESC"  start="0" num="1" return="data"}                        {loop $data $key $r}         

PHPCMS V9 relation 后台添加文章 选择“相关文章” 可调用其它模型文章 的解决办法

问题:在添加文章时候选择相关文章只能是本模型下的栏目文章,如果想选用其他模型的文章该如何做? 思路:添加一个自己的相关文章字段 实现: 1.修改系统默认的relation字段表单代码如下: 1 <input type='hidden' name='info[你的字段名]' id='你的字段名' value='{FIELD_VALUE}' style='50' > 2 <ul class="list-dot" id="你的字段名_text">&

phpcms v9中调用栏目及调用多个子栏目中的文章列表

调用一个指定栏目列表: {pc:content action="lists" catid="6" order="id DESC" num="4"}              {loop $data $key $val}                 {$val['title']}                         {/loop}           {/pc} 调用同栏目下多个子栏目列表: {php  $sub

板邓:wordpress调用热门文章排行代码WP-PostViews

板邓网上找了很多文章,代码都很复杂,不适合新手使用,下面板邓分享最简单方式就可以实现热门文章调用: 1.安装插件 WP-PostViews,设置好. 调用代码如下: <? $args=array( 'numberposts'=>8, 'orderby'=>'meta_value_num',//按点击量排序 'meta_key'=>'views' ); $rand_posts=get_posts($args); foreach($rand_posts as $post){ setup

GET标签实现首页调用全站热门文章

今天用PHPCMS做一项目时,需要实现在首页调用全站文章的需求,但是PHPCMS没有现成的标签可以拿来用,看了下默认的首页模板,有这么一段代码: {pc:content action="hits" catid="6" num="10" order="views DESC"} {loop $data $r} <li><a href="{$r[url]}" target="_blan

PHPCMS V9调用时间标签 |日期时间格式化

PHPCMS V9 如何调用时间标签,下面分享常见的调用时间标签 |日期时间格式化 1.日期时间格式化显示: a标准型:{date('Y-m-d H:i:s', $rs['inputtime'])} 输出为:2013-01-31 13:15:10 b拆分型:{date('Y',$rs[inputtime])}年{date('m',$rs[inputtime])}月{date('d',$rs[inputtime])}日 输出为:2013年01月31日 c扩展型: {date('Y',$inputt

怎么安装phpcms?PHPCMS V9安装图文教程

Phpcms是国内领先的网站内容管理系统, 同时也是一个开源的PHP开发框架.PHPCMS V9目前已提供文章.图片.下载等内容模型,在此基础上可非常方便的扩展出信息.房产.交友.点评等功能.已有的模块有:会员.在线充值.全站搜索.评 论.专题.新闻心情.短消息.投票.友情链接.公告.附件管理.数据源模块.广告.采集.表单向导.手机门户等模块.接下来教大家如何安装. 具体操作如下: 1.首先到官网下载phpcms v9程序. 2.下载完解压后,有两个文件夹,将install_package目录下