Phpcms V9 调用全站文章排行的解决方法
Phpcms V9 调用全站文章排行的解决方法
发布时间:2016-12-23 来源:查字典编辑
摘要:默认情况下,Phpcms只支持调用当前文章排行,代码如下:{pc:contentaction="hits"catid="$catid"num...

默认情况下,Phpcms只支持调用当前文章排行,代码如下:

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

推荐文章
猜你喜欢
附近的人在看
推荐阅读
拓展阅读
相关阅读
网友关注
最新phpcms学习
热门phpcms学习
CMS教程子分类