欢迎光临
我们一直在努力

简单修改让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)
未经允许不得转载:飘云 » 简单修改让phpcms V9实现调用全站文章排行
分享到: 更多 (0)