手机
当前位置:查字典教程网 >CMS教程 >phpcms >Phpcms V9 调用全站文章排行的解决方法
Phpcms V9 调用全站文章排行的解决方法
摘要:默认情况下,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 V9 调用全站文章排行的解决方法】相关文章:

phpcms v9如何调用外部数据库?调用的标签是什么

phpcms更换服务器后前台后台无法登录的解决方法

PHPCMS 验证码无法显示的解决方法

PhpCMS文章内容页添加副标题的方法

phpcms调用getJSON无法返回json数据的解决方法

phpcms v9会员也可以修改未审核稿件的方法

PHPCMS忘记后台密码找回及时间解锁方法

phpcms 调用全站任何模型数据的PC标签

phpcms实现列表页显示文字来源及点击数量的方法

phpcms安装时出现Errno:1067错误的解决办法

精品推荐
分类导航