漂泊的云,停留的心!
人的头脑太复杂,时间过得久……

简单修改让phpcms V9实现调用全站文章排行

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″}

赞(0)
版权声明:本文采用知识共享 署名4.0国际许可协议 [BY-NC-SA] 进行授权
文章名称:《简单修改让phpcms V9实现调用全站文章排行》
文章链接:https://piaoyun.cc/504.html
本站资源仅供个人学习交流,请于下载后24小时内删除,不允许用于商业用途云路窝农家乐,否则法律问题自行承担。