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'] = "<table width='100%'> <tr  style=\"background-color:#eee;line-height:25px;\" align='right'><td>";  

        $config['full_tag_close'] = '</td></tr></table>';  


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

        $config['first_tag_open'] = ' <span class="page_link">[';  

        $config['first_tag_close'] = ']</span> ';  


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

        $config['last_tag_open'] = ' <span class="page_link">[';  

        $config['last_tag_close'] = ']</span"> ';  


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

        $config['next_tag_open'] = ' <span class="page_link">[';  

        $config['next_tag_close'] = ']</span"> ';  


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

        $config['prev_tag_open'] = '<span class="page_link">[';  

        $config['prev_tag_close'] = ']</span">';  


        $config['num_tag_open'] = ' <span class="page_link">[';  

        $config['num_tag_close'] = ']</span"> ';  


        $config['cur_tag_open'] = ' [<span style="color:red;font-weight:bold;">';  

        $config['cur_tag_close'] = '</span>] ';  

        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的分页搜索,因为接触时间也不长,有错误之处欢迎指正:-)

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

来源: <http://blog.csdn.net/zhaoyu7777777/article/details/13295249>

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,163评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,301评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,089评论 0 352
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,093评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,110评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,079评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,005评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,840评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,278评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,497评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,394评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,980评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,628评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,796评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,649评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,548评论 2 352

推荐阅读更多精彩内容

  • 控制器1.文件名不需要加后缀,全部小写2.类名首字母大写,继承CI_Controller基类3.以下划线开头或者非...
    栋栋晓阅读 1,386评论 1 6
  • JSP总结(经典) day1 JSP 定义: 1)Java Server Page, Java EE 组件,本...
    java日记阅读 3,435评论 0 13
  • 目录 文件上传 缩略图 载入分页类 验证码 加密密钥 session类 登录验证 拓展自定义公共类 载入公共视图 ...
    peterz博客阅读 1,024评论 0 1
  • 因为公司里做商城开发用的是OpenCart,上级让我先熟悉这个系统,借此机会详细解读一下商品管理这一功能(也是为了...
    山有木兮_卿有意阅读 1,624评论 0 2
  • 一. Java基础部分.................................................
    wy_sure阅读 3,810评论 0 11