Phpcms V9 调用全站文章排行的解决方案
发布:smiling 来源: PHP粉丝网 添加日期:2014-10-19 22:25:45 浏览: 评论:0
今天忙于修改网站界面,想在首页添加浏览排行功能,却发现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文件,找到以下函数:
- 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]);
- } //phpfensi.com
- }
- return $array;
- }
修改代码,见注释,代码如下:
- 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"}
Tags: Phpcms全站文章 Phpcms文章排行
相关文章
- ·phpcms v9调用全站最新文章功能代码(2014-10-20)
- ·【phpcms-v9】如何通过{pc}标签获取全站文章内容?(2014-10-23)
- ·【phpcms-v9】phpcms-v9中get标签调用全站文章内容(2014-10-24)
- ·PHPCMS全站文章点击排行2个例子(2014-12-05)
- ·Phpcms v9调用全站文章排序榜实现方法(2015-03-24)
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)