站长学院
CMS建站教程 SEO优化攻略
来源:齐鲁建站 栏目:开发教程 阅读: 日期:2020-07-31
最近有朋友问PhpcmsV9调用全站文章排行的解决方案,想在首页添加浏览排行功能,发现Phpcms竟然不支持调用全站文章排行。齐鲁建站小编仔细研究了Phpcms源码,终于找到解决办法。今天就来说说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']);$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全站文章排行的所有内容,不懂的话可以和小编联系哦。