phpcms V9是一个非常优秀的CMS管理系统,但是每一个CMS都不可能是完美的,很多功能需要经过二次开发,修改部分内核才能得到自己想要的效果,比如:在默认情况下,phpcms不支持调用全站文章排行。phpcms只支持调用当前文章排行,代码如下:
{pc:content action=”hits” catid=”catid” num=”10″ order=”views DESC” cache=”3600″}
其中catid为待调用栏目的id,如果想实现全站调用,需要修改phpcms\modules\content\classes\content_tag.class.php文件,找到以下函数(大概在:148——196行):
/** * 排行榜标签 * @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 asid) { 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 asid) { 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″}