CI分页搜索实现

 

CI分页搜索实现

分类: php 学习笔记2013-10-28 16:13 992人阅读 评论(2) 收藏 举报

ci分页搜索ci条件搜索分页ci编写条件分页搜索ci编写条件搜索codeigniter条件搜索

一、背景说明

  由于公司新启动了一个项目,在开发的前期,老大说这次用CI框架来做,于是就开始了各种研究。因为是管理系统的项目,所以会有很多的搜索分页实现,但是在用CI原生的分页时候发觉达不到效果。比如说,有些时候需要同时保存username和gender的条件查询而进行分页,试了用session和get的方法,最后折腾了一天,终于搞定了,现在记录一下这个过程吧。

二、实现说明

利用URI类的segment来判断是否为第一次加载,以致设置相应的查询条件;

利用session来保存相应的查询条件;

设置分页类来达到效果;

三、具体步骤

  1.设置公共函数,进行分页设置选项,具体代码如下:

[php] view plaincopy

/** 

     * 分页生成 

     * @param string $base_url  当前分页URL 

     * @param int $total_rows   数据总条数 

     * @param int $per_page     每页显示数据条数 

     * @param int $uri_segment  分页方法自动测定你 URI 的哪个部分包含页数 

     * @param int $cur_page     当前页码,用于条件查询时初始返回第一页 

     * @return mixed            分页信息 

     */  

    public function getPageConfigInfo($base_url = null, $total_rows = 0, $per_page = 0, $uri_segment = 0,$offset=0) {  

        $config = array();  


        if ($offset == 0) {  

            $cur_page = 1;  

        }  


        if(isset($cur_page)){  

            $config['cur_page'] = $cur_page;  

        }  


        $config['base_url'] = site_url() . $base_url;  

        $config['total_rows'] = $total_rows;  


        $config['per_page'] = $per_page;  

        $config['uri_segment'] = $uri_segment;  


        $config['full_tag_open'] = " ";  

        $config['full_tag_close'] = '';  


        $config['first_link'] = '首页';  

        $config['first_tag_open'] = ' [';  

        $config['first_tag_close'] = '] ';  


        $config['last_link'] = '尾页';  

        $config['last_tag_open'] = ' [';  

        $config['last_tag_close'] = '] ';  


        $config['next_link'] = '下一页';  

        $config['next_tag_open'] = ' [';  

        $config['next_tag_close'] = '] ';  


        $config['prev_link'] = '上一页';  

        $config['prev_tag_open'] = '[';  

        $config['prev_tag_close'] = ']';  


        $config['num_tag_open'] = ' [';  

        $config['num_tag_close'] = '] ';  


        $config['cur_tag_open'] = ' [';  

        $config['cur_tag_close'] = '] ';  

        return $config;  

    }  

  大概说一下,除了基本CI要求的参数之外,还有一个参数:

[php] view plaincopy

$config['cur_page'] = $cur_page;  

        这个是设置当前页码的参数,多设置这个参数有一个原因,当用户点击查询重新加载新的数据的时候,需要分页显示的页码设置成第一页,所以用了如下代码来判断:

[php] view plaincopy

    if ($offset == 0) {  

        $cur_page = 1;  

    }  

      即偏移量为0则跳转到第一页;

  2.在Controllers设置相应处理

  部分代码如下:

[php] view plaincopy

    //计算偏移量,保留和删除session条件  

    $offset = 0;  


    if ($this->uri->segment($this->uri_segment) != '') {  

        $offset = (int) ($this->uri->segment($this->uri_segment) - 1) * $this->per_page;  

        if ($this->session->userdata('search') != '') {  

            $where = $this->session->userdata('search'); //保持条件查询  

        }  

    } else {  

        $this->session->unset_userdata('client_ver');  

        $this->session->unset_userdata('deal_state');  

        $this->session->unset_userdata('phone_type');  

        $this->session->unset_userdata('begin_dt');  

        $this->session->unset_userdata('end_dt');  

        $this->session->unset_userdata('search');  

    }  


    //客户端版本条件查询  

    if ($this->input->post('client_version') != '') {  

        $_client_ver = $this->input->post('client_ver');  

        $where .= " AND client_version LIKE '%" . $_client_ver . "%'";  

        $this->session->set_userdata('client_ver', $_client_ver);  

    } else {  

        $this->session->unset_userdata('client_ver');  

    }  


    //操作状态条件查询  

    if ($this->input->post('deal_state') != '') {  

        $_deal_state = $this->input->post('state');  

        $where .= " AND deal_state='" . $_deal_state . "'";  

        $this->session->set_userdata('deal_state', $_deal_state);  

    } else {  

        $this->session->unset_userdata('deal_state');  

    }  

      至此,获取前台传入数据已经基本结束

  3.修改Pagination.php类

       1)先$use_page_numbers将此变量设置为TRUE,用页码代替偏移量,即显示分页时候1,2,3...

       2)来到create_links()方法,对如下代码:

[php] view plaincopy

    if ($CI->uri->segment($this->uri_segment) != $base_page)  

    {  

        $this->cur_page = $CI->uri->segment($this->uri_segment);  


        // Prep the current page - no funny business!  

        $this->cur_page = (int) $this->cur_page;  

    }  

if语句进行修改为:

[php] view plaincopy

if (($CI->uri->segment($this->uri_segment) != $base_page)&& $this->cur_page == 0)  

用这个判断来修复当用户点击查询时,实际为第一页,但是页码显示第二页的BUG;

     3)最后一个地方的修改,

[php] view plaincopy

$first_url = ($this->first_url == '') ? $this->base_url : $this->first_url;  

这条语句是用来首页的代码,因为本方法是通过判断segment来判断是否为首次加载,原生CI分页当点击首页时出现的链接地址此部分segment为空,就会导致当已经选择条件查询分页时,点击首页把所有条件删除,所以改为如下即可:

[php] view plaincopy

$first_url = ($this->first_url == '') ? $this->base_url.'1' : $this->first_url;  

四、总结

到现在已经完成了CI的分页搜索,因为接触时间也不长,有错误之处欢迎指正:-)

版权声明:本文为博主原创文章,未经博主允许不得转载。

来源: 

你可能感兴趣的:(CI分页搜索实现)