我要吃菠萝 發表於 2023-8-10 00:00:00

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-&gt;set_modelid($catid)) return false; <br>
$this-&gt;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-&gt;modelid.'-%'; <br>
$sql = "hitsid LIKE '$hitsid'"; <br>
if(isset($data['day'])) { <br>
$updatetime = SYS_TIME-intval($data['day'])*86400; <br>
$sql .= " AND updatetime&gt;'$updatetime'"; <br>
} <br>
if($this-&gt;category[$catid]['child']) { <br>
$catids_str = $this-&gt;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-&gt;hits_db-&gt;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-&gt;db-&gt;table_name = $this-&gt;tablename; <br>
$result = $this-&gt;db-&gt;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-&gt;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-&gt;modelid.'-%'; <br>
$sql = "hitsid LIKE '$hitsid'"; <br>
if(isset($data['day'])) { <br>
$updatetime = SYS_TIME-intval($data['day'])*86400; <br>
$sql .= " AND updatetime&gt;'$updatetime'"; <br>
} <br>
if(!empty($catid) &amp;&amp; $catid&gt;0) { //添加判断:id是否为空 <br>
if(!$this-&gt;set_modelid($catid)) return false; <br>
if($this-&gt;category[$catid]['child']) { <br>
$catids_str = $this-&gt;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-&gt;hits_db-&gt;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-&gt;db-&gt;table_name = $this-&gt;tablename; <br>
$result = $this-&gt;db-&gt;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]
查看完整版本: Phpcms V9 调用全站文章排行的解决方法