Phpcms V9 調用全站文章排行的解決方法
發(fā)布時間:2012-07-30 21:36:48 作者:佚名
我要評論

今天忙于修改網(wǎng)站界面,想在首頁添加瀏覽排行功能,卻發(fā)現(xiàn)Phpcms竟然不支持調用全站文章排行。下午仔細研究了Phpcms源碼,終于找到解決辦法
默認情況下,Phpcms只支持調用當前文章排行,代碼如下:
{pc:content action="hits" catid="$catid" num="10" order="views DESC" cache="3600"}
其中$catid為待調用欄目的id,如果想實現(xiàn)全站調用,需要修改phpcms\modules\content\classes\content_tag.class.php文件,找到以下函數(shù):
/**
* 排行榜標簽
* @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"}
{pc:content action="hits" catid="$catid" num="10" order="views DESC" cache="3600"}
其中$catid為待調用欄目的id,如果想實現(xiàn)全站調用,需要修改phpcms\modules\content\classes\content_tag.class.php文件,找到以下函數(shù):
復制代碼
代碼如下:/**
* 排行榜標簽
* @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圖片太大撐破表格圖片自適應圖片按比例縮小
下面小編就為大家?guī)硪黄昝澜鉀Qphpcms圖片太大撐破表格圖片自適應圖片按比例縮小。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2016-10-18- 這篇文章主要介紹了PHPCMS v9 安全設置、防范教程,需要的朋友可以參考下2016-09-05
PHPCMS V9 全站 Sitemaps生成實現(xiàn)代碼[服務器端版]
這篇文章主要介紹了PHPCMS V9 全站 Sitemaps生成實現(xiàn)代碼[服務器端版],需要的朋友可以參考下2016-06-08- 這篇文章主要介紹了phpcms內容詳情頁只顯示日期不顯示時間的方法,即格式化時間輸出的方法,需要的朋友可以參考下2015-06-19
- 這篇文章主要介紹了PHPCMS制作網(wǎng)站地圖的簡單方法,本文給出了操作步驟及標簽源碼,需要的朋友可以參考下2015-06-19
- 這篇文章主要介紹了PHPCMSV9父欄目調用子欄目的方法,本文講解了在二級欄目列表頁調用、在一級欄目列表頁調用兩種方法方式,需要的朋友可以參考下2015-06-19
PHPCMS使用date函數(shù)實現(xiàn)自動更新頁腳年月的方法
這篇文章主要介紹了PHPCMS使用date函數(shù)實現(xiàn)自動更新頁腳年月的方法,本文主要還是可以學習到date函數(shù)的用法了,需要的朋友可以參考下2015-06-19- 這篇文章主要介紹了phpsso忘記密碼的解決辦法,本文用PHPCMS的密碼及encrypt值替換數(shù)據(jù)表解決了這個問題,方法還是挺靠譜的,只是操作要求有點,需要的朋友可以參考下2015-06-19
- 這篇文章主要介紹了phpcms 退出無法同步通知discuz問題的解決方法,需要的朋友可以參考下2014-12-15
phpcms v9列表頁如何調用子欄目如首頁>產品中心>產品類型a
phpcms v9列表頁如何調用子欄目如:首頁>產品中心>產品類型a>產品類型a11,在列表頁產品類型a中,包括產品類型a1、產品類型a2、產品類型a32014-09-24