phpcmsv9多表联合查询实现分页功能 可以自定义查询

1970-01-01 08:00:00 99 0 来源:智智云

phpcms v9里面自带的listinfo分页函数蛮好用的,可惜啊。不支持多表查询并分页。

看了一下前台模板层支持get标签,支持多表查询,支持分页。刚好可以把这个功能搬到后台来使用。

我们现在对get_model.class.php进行改造使他能支持多表查询并分页,分享给大家

一、打开phpcms\phpcms\model下 get_model.class.php 
在32行添加 方法

//自定义分页查询{支持多表}    public function multi_listinfo($where = '', $page = 1, $pagesize = 12, $key='', $setpages = 10,$urlrule = '',$array = array()) {            $sql = preg_replace('/select([^from].*)from/i', "SELECt COUNT(*) as count FROM ", $where);           // echo $sql;            $this->sql_query($sql);            $c = $this->fetch_next();            $this->number = $c['count'];            $page = max(intval($page), 1);            $offset = $pagesize*($page-1);            $this->pages = pages($this->number, $page, $pagesize, $urlrule, $array, $setpages); //分页            $r = $this->sql_query($where.' LIMIT '.$offset.','.$pagesize);            while(($s = $this->fetch_next()) != false){                $data[] = $s;            }            return $data;    }



二、使用方法

$keyword = trim($_GET['keyword']);$sql = "select e.*,d.* from phpcms_exhibit as e,phpcms_exhibit_data as d where e.id = d.id and e.catid in $catid ";if($keyword){    $where = "and (e.title like '%$keyword%' or d.expcon like '%$keyword%') "; }$sql= $sql.$where." order by e.id desc"; $search = pc_base::load_model('get_model');$page = intval($_GET['page'])?intval($_GET['page']) :'1';$infos = $search->multi_listinfo($sql,$page); //返回查询结果$pages = $search->pages;//返回分页

三、模板调用

{loop $infos $r}<li>    <div class="pic"><img src="{thumb($r[thumb], 184, 138)}" alt="">div>    <div class="cont">    <a href="{$r[url]}" target="_blank" title="{$r[title]}"><h2 class="tit">{$r[title]}h2>a>    <p class="dw"><strong>主办单位:strong><span>{$r[expzbdw]}span>p>    <p class="date"><strong>展会时间:strong><span>{$r[begintime]}至{$r[endtime]}span>p>    <p class="add"><strong>举办展馆:strong><span>{get_linkage($r[expname],3387,' >> ',0)}span>p>    div>li>{/loop}    <div class="pages">{$pages}div>




方法二:


phpcms v9里面自带的listinfo分页函数蛮好用的,可惜啊。不支持多表查询并分页。

看了一下前台模板层支持get标签,支持多表查询,支持分页。刚好可以把这个功能搬到后台来使用。

我们现在对get_model.class.php进行改造使他能支持多表查询并分页,分享给大家

复制代码

<?phpdefined('IN_PHPCMS') or exit('No permission resources.');
pc_base::load_sys_class('model', '', 0);class get_model extends model {    public $db_config, $db_setting;    public function __construct($db_config = array(), $db_setting = '') {        if (!$db_config) {            $this->db_config = pc_base::load_config('database');
        } else {            $this->db_config = $db_config;
        }        if (!$db_setting) {            $this->db_setting = 'default';
        } else {            $this->db_setting = $db_setting;
        }
        
        parent::__construct();        if ($db_setting && $db_config[$db_setting]['db_tablepre']) {            $this->db_tablepre = $db_config[$db_setting]['db_tablepre'];
        }
    }    
    public function sql_query($sql) {        if (!empty($this->db_tablepre)) $sql = str_replace('phpcms_', $this->db_tablepre, $sql);        return parent::query($sql);
    }    
    public function fetch_next() {        return $this->db->fetch_next();
    }    //自定义分页查询{支持多表}
    public function multi_listinfo($where = '', $page = 1, $pagesize = 20, $key='', $setpages = 10,$urlrule = '',$array = array()) {        $sql = preg_replace('/select([^from].*)from/i', "SELECt COUNT(*) as count FROM ", $where);        $this->sql_query($sql);        $c = $this->fetch_next();        $this->number = $c['count'];        $page = max(intval($page), 1);        $offset = $pagesize*($page-1);        $this->pages = pages($this->number, $page, $pagesize, $urlrule, $array, $setpages);        
        $r = $this->sql_query($where.' LIMIT '.$offset.','.$pagesize);        while(($s = $this->fetch_next()) != false){            $data[] = $s;
        }        return $data;
    }
}?>

复制代码

 

使用方法和listinfo一样:

$this->get_db = pc_base::load_model('get_model');$page = intval($_GET['page']);$infos = $this->get_db->muti_listinfo($where,$page);$pages = $this->get_db->pages;


我们猜你喜欢
X

截屏,微信识别二维码

客服QQ:406784192

QQ号已复制,请打开微信添加咨询详情!