Phpcms V9 调用全站文章排行的解决方法
<p><span>默认情况下,Phpcms只支持调用当前文章排行,代码如下: </span><br><span>{pc:content action="hits" catid="$catid" num="10" order="views DESC" cache="3600"} </span><br><span>其中$catid为待调用栏目的id,如果想实现全站调用,需要修改phpcms\modules\content\classes\content_tag.class.php文件,找到以下函数: </span></p>
<div>
<p>
<span><u>复制代码</u></span></p>
<p>
代码如下:</p>
</div>
<p>
<br>
/** <br>
* 排行榜标签 <br>
* @param $data <br>
*/ <br>
public function hits($data) { <br>
$catid = intval($data['catid']); <br>
if(!$this->set_modelid($catid)) return false; <br>
$this->hits_db = pc_base::load_model('hits_model'); <br>
$sql = $desc = $ids = ''; <br>
$array = $ids_array = array(); <br>
$order = $data['order']; <br>
$hitsid = 'c-'.$this->modelid.'-%'; <br>
$sql = "hitsid LIKE '$hitsid'"; <br>
if(isset($data['day'])) { <br>
$updatetime = SYS_TIME-intval($data['day'])*86400; <br>
$sql .= " AND updatetime>'$updatetime'"; <br>
} <br>
if($this->category[$catid]['child']) { <br>
$catids_str = $this->category[$catid]['arrchildid']; <br>
$pos = strpos($catids_str,',')+1; <br>
$catids_str = substr($catids_str, $pos); <br>
$sql .= " AND catid IN ($catids_str)"; <br>
} else { <br>
$sql .= " AND catid='$catid'"; <br>
} <br>
$hits = array(); <br>
$result = $this->hits_db->select($sql, '*', $data['limit'], $order); <br>
foreach ($result as $r) { <br>
$pos = strpos($r['hitsid'],'-',2) + 1; <br>
$ids_array[] = $id = substr($r['hitsid'],$pos); <br>
$hits[$id] = $r; <br>
} <br>
$ids = implode(',', $ids_array); <br>
if($ids) { <br>
$sql = "status=99 AND id IN ($ids)"; <br>
} else { <br>
$sql = ''; <br>
} <br>
$this->db->table_name = $this->tablename; <br>
$result = $this->db->select($sql, '*', $data['limit'],'','','id'); <br>
foreach ($ids_array as $id) { <br>
if($result[$id]['title']!='') { <br>
$array[$id] = $result[$id]; <br>
$array[$id] = array_merge($array[$id], $hits[$id]); <br>
} <br>
} <br>
return $array; <br>
} </p>
<p>
<br><span> 修改代码(见注释): </span></p>
<div>
<p>
<span><u>复制代码</u></span></p>
<p>
代码如下:</p>
</div>
<p>
<br>
/** <br>
* 排行榜标签 <br>
* @param $data <br>
*/ <br>
public function hits($data) { <br>
$catid = intval($data['catid']); <br>
$this->hits_db = pc_base::load_model('hits_model'); <br>
$sql = $desc = $ids = ''; <br>
$array = $ids_array = array(); <br>
$order = $data['order']; <br>
$hitsid = 'c-'.$this->modelid.'-%'; <br>
$sql = "hitsid LIKE '$hitsid'"; <br>
if(isset($data['day'])) { <br>
$updatetime = SYS_TIME-intval($data['day'])*86400; <br>
$sql .= " AND updatetime>'$updatetime'"; <br>
} <br>
if(!empty($catid) && $catid>0) { //添加判断:id是否为空 <br>
if(!$this->set_modelid($catid)) return false; <br>
if($this->category[$catid]['child']) { <br>
$catids_str = $this->category[$catid]['arrchildid']; <br>
$pos = strpos($catids_str,',')+1; <br>
$catids_str = substr($catids_str, $pos); <br>
$sql .= " AND catid IN ($catids_str)"; <br>
} else { <br>
$sql .= " AND catid='$catid'"; <br>
} <br>
} <br>
$hits = array(); <br>
$result = $this->hits_db->select($sql, '*', $data['limit'], $order); <br>
foreach ($result as $r) { <br>
$pos = strpos($r['hitsid'],'-',2) + 1; <br>
$ids_array[] = $id = substr($r['hitsid'],$pos); <br>
$hits[$id] = $r; <br>
} <br>
$ids = implode(',', $ids_array); <br>
if($ids) { <br>
$sql = "status=99 AND id IN ($ids)"; <br>
} else { <br>
$sql = ''; <br>
} <br>
$this->db->table_name = $this->tablename; <br>
$result = $this->db->select($sql, '*', $data['limit'],'','','id'); <br>
foreach ($ids_array as $id) { <br>
if($result[$id]['title']!='') { <br>
$array[$id] = $result[$id]; <br>
$array[$id] = array_merge($array[$id], $hits[$id]); <br>
} <br>
} <br>
return $array; <br>
} </p>
<p>
<br><span>修改代码后,无论设置栏目id为0或空,都能调取全站文章排行。 </span><br><span>调用方法1: </span><br><span>{pc:content action="hits" catid="0" num="10" order="views DESC" cache="3600"} </span><br><span>调用方法2: </span><br><span>{pc:content action="hits" num="10" order="views DESC" cache="3600"}</span></p>
頁:
[1]